在页面加载时将javascript函数注入WebView

时间:2017-04-17 14:08:37

标签: javascript android webview

我试图在页面加载之前将全局JavaScript函数注入到webview中。我有一个名为testJS的函数,我正在注入。在我的WebViewClient中,我正在执行以下操作

private String getJS() {
    return "javascript:function testJS() { return { test: 'Hello World' };}";
}

 @Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
    view.loadUrl(getJS());
}

当我检查页面时,window.testJS未定义。

如果我执行以下操作,window.testJS在webview中具有正确的功能,但未及早加载,因此无法正常工作。

@Override
public void onPageFinished(WebView view, String url) {
    view.loadUrl(getJS());
}

在iOS中,我可以通过注入脚本atDocumentStart来完成相同的操作,并且它按照我期望的方式工作。

let userScript = WKUserScript(
        source: scriptContent!,
        injectionTime: WKUserScriptInjectionTime.atDocumentStart,
        forMainFrameOnly: false)
contentController.addUserScript(userScript) 

我还有另一种方法可以在Android WebView中实现这一点吗?它适用于PageFinished但不适用于onPageStarted。

1 个答案:

答案 0 :(得分:-1)

首先尝试允许javascript作为设置功能:

WebSettings webSettings = yourWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

然后:

yourWebView.addJavascriptInterface(new Object(){
       @JavascriptInterface
       public void test(){
           Log.d("JS", "test");
            }
   },"Android");
yourWebview.loadUrl("javascript:functionName(\"" + argument + "\")");

参考以下问题:

Android Calling JavaScript functions in WebView

Call javascript function in Android WebView