我试图在页面加载之前将全局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。
答案 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 + "\")");
参考以下问题: