0

我需要获取在 webview 中加载的 html 页面的一些属性。类似于这里的东西:stringByEvaluatingJavascriptFromString(iOS 方法,什么是 Android 等价物?)

所以我有一个 JavaScriptInterface:

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

ant 那么这里是我用来获取我需要的字符串的 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 回答