【问题标题】:Android: overriding shouldOverrideUrlLoading not working on HTC devicesAndroid:覆盖 shouldOverrideUrlLoading 在 HTC 设备上不起作用
【发布时间】:2012-10-27 00:24:21
【问题描述】:

在运行 Android 2.3.5 的 HTC Evo 上,永远不会调用覆盖的 shouldOverrideUrlLoading()。完全相同的代码在运行 Android 2.3.6 的三星 Galaxy 上运行良好。

到目前为止,我已经尝试过覆盖 onPageStarted()onPageFinished()。我在这些方法中看不到 URL。

我的目的是为页面中的mailto:tel: 链接提供自定义活动。如果shouldOverrideUrlLoading() 从未被击中,关于如何完成这项工作的任何想法?

我已经在 stackoverflow 和其他地方查看过类似的问题,但没有发现任何相关内容。

【问题讨论】:

  • [取自](stackoverflow.com/questions/9670136/…)。问题似乎是js函数setTimeout(fn,millis)。您已经编写了一个覆盖它的 js 函数,然后在您的 Android 代码中重新创建此函数的行为(使用 JavascriptInterface),因为它最适合您的应用程序。很多工作取决于您的应用程序功能,但它确实有效。这个想法是覆盖 setTimeout 然后从 android 代码中调用一个方法,该方法使线程在 js 中 setTimeout 的初始调用中休眠了多少毫秒。
  • 感谢您的评论。我会试一试;但 Javascript 可能不是一个可接受的解决方案。我也在看stackoverflow.com/questions/5116909/…

标签: android webview overriding


【解决方案1】:

shouldOverrideUrlLoading() 不仅适用于某些 Android 版本,例如 2.1 或 2.3.6,但它在 2.3.3、2.3.5、4.0.2 或 4.0.3 上运行良好。

如果你需要处理点击 webview 上的链接,你必须使用shouldOverrideUrlLoading() 方法。如果你只需要处理加载网页,你应该使用onPageStarted()

这是安卓开发者链接:https://developer.android.com/guide/webapps/migrating.html

  • 注意:例如:我们在网页上有 2 个链接。

    1. <a href="http://www.w3schools.com/">Visit W3Schools!</a>
    2. <a href="http://www.w3schools.com/" target="_blank">Visit W3Schools!</a>

shouldOverrideUrlLoading() 仅在用户单击链接“1”时调用。 当用户点击链接“2”时不会调用它

public void onPageStarted(WebView view, String url, Bitmap favicon) {

    if (url.contains("success")) {
        Intent intent = new Intent(WebviewActivity.this, OrderConfirmActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    } else {
        super.onPageStarted(view, url, favicon);
    }
}

【讨论】:

  • 我不明白为什么 `if (url.contains("success"))` 有效。你能解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 2011-12-21
  • 2014-01-24
  • 2020-12-24
  • 1970-01-01
相关资源
最近更新 更多