资产访问是否可以从任何网页或本地资产网页进行操作?

时间:2014-03-03 16:08:35

标签: android android-webview

我正在尝试将脚本添加到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

我使用自己的网址方案加载了这些相同的文件,所以我知道它们工作得很好。我还有其他方法可以加载它们,但我想尝试file:///android_asset/的东西。这不是正确的方法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

不,不允许远程内容加载本地内容。

您可以通过将Java端的应用程序中的本地JS加载到String中并直接注入该String(使用相同的javascript: URL方法)来实现相同的效果。