0

webview に読み込まれた html ページのいくつかのプロパティを取得する必要があります。ここにあるものに似たもの: stringByEvaluatingJavascriptFromString (iOS メソッド、Android に相当するものは何ですか?)

だから私は JavaScriptInterface を持っています:

class MyJavaScriptInterface {
    @android.webkit.JavascriptInterface
    public void jsCallback(String jsResult) {
        // your code...
        Log.d("Debug", jsResult);
    }
}

次に、必要な文字列を取得するために使用する JS を次に示します。

webView.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
    webView.loadUrl("javascript:( "
            + "function () { "
            + "var htmltag = document.getElementsByTagName(\"html\");"
            + "var dataStr = htmltag[0].getAttribute(\"some-data-property-i-need\"); "
            + "console.log(window.HTMLOUT);"
            + "window.HTMLOUT.jsCallback(dataStr); } ) ()");

コンソールに次のトレースが表示されます。

06-02 01:14:06.409: V/CallNative fired:(26789): objc://domReady
06-02 01:14:06.464: I/Web Console(26789): undefined at null:1
06-02 01:14:06.480: E/Web Console(26789): Uncaught TypeError: Cannot call method 'jsCallback' of undefined at null:1

「window.HTMLOUT」が未定義である理由がわかりません。ある時点で機能していたことに注意してください。その後、JS部分を少し変更しましたが、何が問題なのかまだわかりません。

4

1 に答える 1

0

JS コードは、ページ全体が読み込まれた後に実行できます。次の方法を試してください。

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        // Call JS code here
    }
});
webView.loadDataWithBaseURL(null, "<html></html>", "text/html", "UTF-8", "");

前の方法がうまくいかない場合は、 のHTMLOUT.jsCallback(dataStr)代わりに を試してくださいwindow.HTMLOUT.jsCallback(dataStr)

于 2013-06-01T23:37:59.367 に答える