【问题标题】:window.location.href javascript does not trigger shouldOverrideUrlLoadingwindow.location.href javascript 不会触发 shouldOverrideUrlLoading
【发布时间】:2011-03-31 15:25:18
【问题描述】:

我在 nexous 上进行的测试(使用 android 2.2 编译)显示当页面通过 window.location.href 重定向时不会触发 shouldOverrideUrlLoading。 onPageFinished 照常触发。

谁能建议如何拦截 javascript 页面重定向? 在javascript中重定向页面的任何其他方式以便触发shouldOverrideUrlLoading? 这是 shouldOverrideUrlLoading 的错误吗?

谢谢,

六月

【问题讨论】:

    标签: android


    【解决方案1】:

    就我而言,在我的网页中使用window.location = "http://xxx" 时,不会触发事件shouldOverrideUrlLoading()

    但是,如果我使用自定义 url 方案或协议,例如 androidurl://shouldOverrideUrlLoading() 会被触发。我的解决方法是使用自定义协议并在 shouldOverrideUrlLoading() 方法中添加以下代码:

    if (url.startsWith("androidurl://")) {
        url = url.replaceAll("androidurl://", "http://");
    }
    

    这会将自定义协议改回http:// 协议,您可以从那里处理正确的网址。

    这对我有用。

    【讨论】:

      【解决方案2】:

      谁能建议如何拦截 javascript 页面重定向?

      修改 Javascript 以调用您通过 addJavascriptInterface() 注入到 WebView 的某个对象的方法。

      这是 shouldOverrideUrlLoading 的错误吗?

      可能。这当然是一个限制。

      【讨论】:

      • 这是一个错误,因为如果您更改 location.href,您确实会加载一个 URL。因此,通过覆盖它并处理所有内容,您应该能够确保根本没有其他 URL 加载。人们认为 WebView 只是为了显示他们自己的页面。但是考虑你要渲染远程站点,并且不控制 javascript 运行...
      • @CommonsWare 你能告诉我当我在 div 标签中加载视图时如何获取 url.. 并且只使用一个 index.html 并将其他文件数据加载到索引文件的那个 div 标签中。在这种情况下,我怎样才能获得 url
      【解决方案3】:

      也许您可以使用 WebChromeClientonJsBeforeUnload() 来拦截您所关注的事件离开当前页面。覆盖 onJsBeforeUnload() 并将标志设置为 true

      然后使用WebViewClientonLoadResource()截取要加载的URL。如果 flag 为 true,则随心所欲,例如在另一个 Intent 中打开 URL;否则什么都不做。

      另外,记得添加到您的 HTML:

      <script> window.onbeforeunload = function(){  
         return "Leave?";  
      }; </script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-09
        • 2011-07-10
        • 1970-01-01
        • 1970-01-01
        • 2019-10-10
        • 1970-01-01
        • 2012-07-06
        • 1970-01-01
        相关资源
        最近更新 更多