11

AndroidWebViewとJavaScriptを利用するアプリケーションがあります。WebViewClientがを呼び出すとonPageFinished()、JavaScriptに初期化メソッドを実行するように警告します。を押す前に、JavaScriptが有効になってロードされていonPageFinished()ます。

そのJavaScriptメソッドで私はを利用しwindow.innerWidthます。ただし、返される値は常に間違っており、常に同じです。向きに関係なく、内側の幅は320、内側の高さは240と報告されます(縦向きと横向きの正しい幅の値はそれぞれ360と598です)。他の場所にアクセスするwindow.innerWidthwindow.innerHeight、JavaScriptを使用すると、正確な数値が得られます。

さらに不可解なのは、onPageFinished()呼び出しでWebViewの高さまたは幅を直接チェックすると

int height = view.getHeight();

int width = view.getWidth();

その後、常に正しく返されます(ただし、DIPではなく正確なピクセル番号が返されます)。これにより、すべてがWebViewでの読み込みが完了したと思うので、JavaScriptで問題が発生することはないはずです。

何が起こっているのかについて何かアイデアはありますか?

前もって感謝します!

4

4 に答える 4

8

これは、JavascriptがWebViewのView関連の初期化の前に実行されるためです。また、AndroidWebViewは320x240のデフォルト値をJSに返します。このように、しばらくしてからJSを実行します。

function go() {
int height = view.getHeight();
int width = view.getWidth();
};
window.setTimeout(go, 300);
于 2012-09-26T05:19:28.707 に答える
0

最後に、webView.getHeight()との値を使用webView.getWidth()し、画面密度に合わせて調整し、引数として。を介してjavascriptメソッドに渡しましたwebView.loadUrl()。これが、正しい値を取得していることを確認できる唯一の方法でした。

上記のコメントで提案されたことを実行し、幅320、高さ240を確認すると、これらの正確な寸法のデバイスで実行するまではうまく機能します。

于 2014-06-09T13:04:48.827 に答える
0

いくつか読んだ後、別の解決策が発生しました。Javaコードでは、次を使用できます

new Handler().post(new Runnable(){ 
    @Override 
    public void run(){
        webview.loadUrl("...")
    }
}); 

それをQueueMessageに追加し、jsの実行を遅らせれば、機能します。

于 2015-09-28T08:04:12.543 に答える
0

私はこれを使用しました:

のJavaコードActivity

webView.addJavascriptInterface(new WebAppInterface(this), "Android");

..。

public class WebAppInterface {
    Context mContext;

    WebAppInterface(Context c) {
        mContext = c;
    }

    public int getWinHeight() {
      return webView.getHeight();
    }
}

JSコード:

var winHeight = Android.getWinHeight();
于 2016-03-21T18:20:05.557 に答える