在Android Webview的开始处插入JS

在Android Webview的开始处插入JS,android,android-webview,Android,Android Webview,我无法在页面开始加载之前添加Javscript。我试着这样做: @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); browser.loadUrl("javascript:alert(window.prepended = 'abc - "+url+"');"); } 或: 但在我第一次单击“

我无法在页面开始加载之前添加Javscript。我试着这样做:

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
    super.onPageStarted(view, url, favicon);
    browser.loadUrl("javascript:alert(window.prepended = 'abc - "+url+"');");
}
或:

但在我第一次单击“重新加载”之后,我在JS中没有定义:

编辑:
最后,我使用了WebChromeClient中的onProgressChanged函数:

在onPageStarted方法中尝试类似的操作:

上面的方法修改当前页面,它将显示一个自定义错误页面,而不是默认页面。 我在onReceivedError上调用了这个函数,但您可以在onPageStarted中使用它并添加自定义javascript函数。 这只是为了让您了解如何操作当前页面


致以最诚挚的问候。

在缓存中创建一个新的html文件,并首先附加脚本。然后读取正在加载的页面的所有内容,并将其写入创建的新文件中。然后将新文件加载到您的webview。您是说内置webview缓存?我可以更改缓存文件吗?我认为这将运行页面2次…尝试您的建议使用onProgressChanged。。。如果在onProgressChanged逻辑中调用loadUrl,如何防止出现无限循环的情况?thx.我有一些工作页面,在加载之前我必须设置一些变量。所以当前页面中的cookies、ajax和javascript都需要工作。在函数使用默认值之前,只需为函数设置一些比例即可。您可以尝试使用以下内容更改其值:document.getElementById'field';field.value='custom_value';在这种情况下,JS中的任何东西都帮不了我,相信我;加载页面后-发送了ajax请求,此时任何脚本都没有意义。请尝试在shouldOverrideUrlLoading中更改页面,然后再次加载。。。我对JS没有太多的经验。对不起,我帮不上什么忙了。
@Override
public void onLoadResource(WebView view, String url) {
    super.onLoadResource(view, url);
    browser.loadUrl("javascript:alert(window.prepended = 'abc - "+url+"');");
}
<script type="text/javascript">
alert(window.prepended);
setTimeout("alert('Timeout: '+window.prepended)", 2000);
</script>
<a href="?">Reload</a>
/*
* This call injects JavaScript into the page replacing the page
* content
*/
webView.loadUrl(injectJavaScriptIntoErrorPage());
/**
* Method used to inject custom JavaScript code into HTML page.
* 
* @return String of JavaScript function Called in onReceivedError method
*         for myWebClient
*/
protected String injectJavaScriptIntoErrorPage() {
    String errorPage = "javascript:(function() { "
        + "document.getElementsByTagName('style')[0].innerHTML = ' "
        + " body { margin:auto;width:500px;text-align:center; }"
        + " p { font-size:20px; }'; "
        + "document.getElementsByTagName('body')[0].innerHTML = ' "
        + "  <img src=\"file:///android_asset/custom_error.png\"/>"
        + "  <p>Venter p&#229; nettet.</p>" + "';})()";
    return errorPage;
}