我有一个由 Javascript 控制的本地网站,并将其加载到 WebView 中。该网站实际上是一个带有 iframe 的主页,其内容根据用户输入而变化。主页上有一个“下一步”按钮,它运行一些 javascript 函数并决定在 iframe 中加载哪个页面(通过 document.getElement(...).src = )
在 Android 2.1 中,一切都运行良好 - 模拟和手机上。网络视图正确加载所有页面。
我在 2.2 手机上测试了它,每当我单击“下一步”时,页面(应在 iframe 中加载)就会加载到默认浏览器中。
我定义了一个意图过滤器
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="file"
android:host="*"
android:pathPrefix="sdcard/Android/data/android.website/files/pages"
/>
</intent-filter>
希望它将页面请求重定向到活动,但它不起作用。该 url 仍由浏览器加载。
使用shouldOverredeUrlLoading效果不佳,因为加载的链接是内部框架之一。我尝试加载 javascript 代码,将该 url 设置为 iframe 的 src,但没有成功。
奇怪的是,这种情况只发生在 2.2 手机上。在 2.2 模拟器中它运行良好。
有任何想法吗?
Android 4.x 的行为似乎如下:
shouldOverrideUrlLoading
仅当整个页面即将更改时调用。
iframe 只是页面的一部分。所以shouldOverrideUrlLoading
不被调用。
压倒一切public WebResourceResponse shouldInterceptRequest(WebView view, String url)
为我工作。
似乎没有合适的方法来阻止WebResourceResponse
。不过,您可以加载另一个 URL:
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
if( url.contains("myFancyUrl") ) {
// Do something
try {
return new WebResourceResponse("", "", new URL("http://myserver.com/myrootdocument.html").openStream());
} catch(Exception exception) {
Log.e( exception.toString() );
}
}
return super.shouldInterceptRequest(view, url);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)