0

私の Android アプリは、JS コードを WebView に挿入します。Android 3.1 を対象としていますが、WebView が内部でクロムになっているため、Android 6 および 7 で問題が発生しているため、古い WebView ではありません。

それにもかかわらず、問題は非常に奇妙であるため、アプリが Android 6 および 7 に強制する quirksmode が原因ではないと思います。

私のアプリは、すべての便利な呼び出しを使用して、Java コードと JS コードの間のバインディングを作成する JS インターフェースをロードし、以前のバージョンで動作します。これらの指示 (addJavascriptInterface() メソッド) の後、「偽の」読み込みを実行して、JS インターフェースが確実に読み込まれるようにします。

webView.loadData("", "text/html", null);

「ページ」が読み込まれると、実際の URL、つまりローカル ファイル (file:///...) の読み込みが実行されます。これも読み込まれると、スクリプトが挿入されて実行されます。

私が経験したことは、ログ cat で次のエラーが継続的に発生することです。

Cannot call determinedVisibility() - never saw a connection for the pid:

私はこれについてSOで見つかったさまざまな提案を試みましたが、成功しませんでした:

何度も何度もロードされ続けるのは「data:text/html」URLであり、空のURLのロードのみを停止できますが、JSインターフェイスが失われます。

JS インターフェイスを維持し、無限の読み込みループをブロックするにはどうすればよいですか?

4

1 に答える 1

0

This kind of issue was fixed by changing the first "fake" call that was intended to effectively add the JS interface (it's needed) to the WebView.

The above mentioned method, with this instruction:

webView.loadData("", "text/html", null);

worked only with versions older than Android 6.x (it may depend on the devices, so it could fail also on 4.4 and 5.x, but my app worked on both).

So the right method working on all versions is to load the target file twice (performing a new loading when the first one has completed),

or it is also possible to load another file (like a simple HTML with no content in the body) first and then load the target file (when the first loading has completed).

于 2016-12-06T12:52:08.893 に答える