Browserfield
上部にバナーがあり、その下に外部サイトが表示される blackberry 5.0+ アプリの画面を作成しようとしています。バナーは 1 つのサイトでホストされ、のコンテンツはBrowserField
別のサイトでホストされます。
最初は 2 つの BrowserFields を使用してみましたが、複数のデバイスでバナーが表示されず、その下のコンテンツのみが表示されるという問題がありました。さらに、同じ設定の別の画面が表示されると、アプリがクラッシュしてIllegalStateException
. 少し調べてBrowserField
みたところ、一度に複数のインスタンスが存在すると問題が発生するようです。
したがって、この問題を回避するために、最初のフレームにバナー広告を表示し、2 番目のフレームにその下のコンテンツを表示することを期待して、htmlBrowserField
の frame タグを使用して両方を 1 つに結合しました。
私が作成した html は、通常のブラウザーで動作します。
<!DOCTYPE html>
<html>
<frameset rows="10%,90%">
<frame scrolling="no" src="http://4.bp.blogspot.com/_CZ1HhhanNgc/TI0xscVLW8I/AAAAAAAABps/sfeO4E3234k/s1600/head-mp-700x88.jpg" noresize="noresize" frameborder="0">
<frame src="http://www.penny-arcade.com" frameborder="0">
</frameset>
</html>
私がやっていることは、html をテキストとして読み取り、\n
andを削除し\r
てから、次のメソッドに入れることです。browserField.displayContent(html,"http://localhost");
このメソッドはブラウザでhtmlを表示することになっていますが、代わりにシミュレータでこれを取得します:
デバイスに空白の画面が表示されます。メソッドで何が起こっているのかわからないdisplayContent()
ので、外部サイトは許可されていないと思いますか? この時点から、自分のオプションが何であるかはよくわかりません。これに対する何らかの修正、使用できるライブラリ、またはこれを実装する他の方法はありますか?
編集:
そのため、@Nate はDOCTYPE
タグの変更を提案し、動作している html のスクリーンショットを投稿しました。ただし、これを行っても同じ結果が得られるため、画面を作成するために使用しているコードを投稿します。ここにあります:
public final class MyScreen extends MainScreen
{
/**
* Creates a new MyScreen object
*/
private BrowserField browserField;
public MyScreen()
{
// Set the displayed title of the screen
setTitle("MyTitle");
BrowserFieldConfig config = new BrowserFieldConfig();
config.setProperty(BrowserFieldConfig.VIEWPORT_WIDTH, new Integer(Display.getWidth()));
config.setProperty(BrowserFieldConfig.NAVIGATION_MODE,
BrowserFieldConfig.NAVIGATION_MODE_POINTER);
config.setProperty(BrowserFieldConfig.INITIAL_SCALE, new Float(1.0));
config.setProperty(BrowserFieldConfig.USER_SCALABLE, Boolean.FALSE);
//supposed to prevent InvalidStateException from refreshing sometimes
ProtocolController eventsProtocolController = new ProtocolController(browserField)
{
public void handleNavigationRequest(BrowserFieldRequest request) throws Exception
{
browserField.setFocus();
super.handleNavigationRequest(request);
}
};
config.setProperty(BrowserFieldConfig.CONTROLLER, eventsProtocolController);
browserField = new BrowserField(config);
try
{
String embeddedLinkFrame = readTextFile("frame.html");
browserField.displayContent(embeddedLinkFrame, "http://localhost");
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
add(browserField);
}
public String readTextFile(String fName)
{
String result = null;
DataInputStream is = null;
try
{
is = new DataInputStream(getClass().getResourceAsStream("/" + fName));
byte[] data = IOUtilities.streamToBytes(is);
result = new String(data);
}
catch (IOException e)
{
System.out.println(e.getMessage());
}
finally
{
try
{
if (null != is)
is.close();
}
catch (IOException e)
{
System.out.println(e.getMessage());
}
}
return result;
}
}