我正在尝试将脚本添加到托管在 www.example.com 的现有网页中。所以我打电话:
webView.loadUrl("http://www.example.com");
我还在更改以下设置:
settings.setJavaScriptEnabled(true);
settings.setSupportZoom(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setBuiltInZoomControls(true);
settings.setSupportMultipleWindows(true);
settings.setLoadWithOverviewMode(true);
settings.setUseWideViewPort(true);
settings.setDomStorageEnabled(true);
settings.setAllowContentAccess(true);
settings.setAllowFileAccess(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
settings.setAllowUniversalAccessFromFileURLs(true);
settings.setAllowFileAccessFromFileURLs(true);
}
然后在onPageStarted
事件中,我尝试以这种方式注入一些javascript:
webView.loadUrl("javascript:var script1 = document.createElement( 'script' );" +
"script1.type = 'text/javascript';script1.src = 'file:///android_asset/firstfunction.js';" +
" document.documentElement.appendChild(script1);");
当我这样做时,我收到以下错误:
E/Web Console﹕ Not allowed to load local resource: file:///android_asset/firstfunction.js at null:0
我使用自己的 url 方案加载了这些相同的文件,所以我知道它们工作得很好。我还有其他方法可以加载它们,但我想尝试一下file:///android_asset/
的东西。这难道不是正确的做法吗?
谢谢。
不可以,不允许远程内容加载本地内容。
您可以通过将 Java 端应用程序中的本地 JS 加载到字符串中,并直接注入该字符串(使用相同的 javascript:
URL 方法)来实现相同的效果。