webview加载包含.js作为<script src>的本地html文件

kam*_*iew 5 android

我将.html(包含.js web链接)文件放在assest中,现在我正在尝试加载url

mWebView = (WebView) findViewById(R.id.webview);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setPluginsEnabled(true);
        mWebView.getSettings().setAllowFileAccess(true);

        mWebView.loadUrl("file:///android_asset/anim1.html");
Run Code Online (Sandbox Code Playgroud)

在这里,我无法播放.js文件,等待积极响应.

Sun*_*sen 7

首先,我认为你不太可能真的想要从资产中访问HTML和JavaScript文件,因为一旦打包并签署了应用程序,资产就不能(也不应该)更新.这意味着,使用资产中的HTML和JavaScript,您无法更新它们.解决该问题的方法是将HTML和JavaScript保存在内部或外部存储中,并从那里使用它.

其次,如果您使用我刚才解释过的方法,您就不能再使用该WebView.loadUrl()方法,而是需要使用该WebView.loadDataWithBaseUrl()方法.像这样:

webView.loadDataWithBaseURL("http://some_url/", "some_data", "text/html", "utf-8", null);
Run Code Online (Sandbox Code Playgroud)

然后,将尝试将"some_data"作为HTML页面加载,如之前的SO答案所示.当它尝试加载JavaScript资源时,/scripts/lib.js它将被解析为http://some_url/scripts/lib.js,并且WebView将尝试加载该资源.当然它不能,这就是为什么你(在Java中)需要扩展WebViewClient类,并为该shouldInterceptRequest(WebView wv, String url)方法提供实现.

当尝试在网页中提取任何资源时,将调用'thehouldInterceptRequest',并将其返回值用作资源.