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

sid*_*bob 5 javascript android webview

我试图在页面加载之前将全局 JavaScript 函数注入到 Web 视图中。我有一个名为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());
}
Run Code Online (Sandbox Code Playgroud)

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

如果我执行以下操作,window.testJS网络视图中具有正确的功能,但它加载得不够早,因此无法正常工作。

@Override
public void onPageFinished(WebView view, String url) {
    view.loadUrl(getJS());
}
Run Code Online (Sandbox Code Playgroud)

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

let userScript = WKUserScript(
        source: scriptContent!,
        injectionTime: WKUserScriptInjectionTime.atDocumentStart,
        forMainFrameOnly: false)
contentController.addUserScript(userScript) 
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以在 android WebView 中实现此目的?它适用于PageFinished,但不适用于PageStarted。

小智 -4

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

WebSettings webSettings = yourWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
Run Code Online (Sandbox Code Playgroud)

然后:

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

参考这些问题:

Android 在WebView中调用JavaScript函数

在Android WebView中调用javascript函数