【问题标题】:Android Appcelerator Get URL from remote URL in webview and open it in devices default browser or a new webviewAndroid Appcelerator 从 webview 中的远程 URL 获取 URL 并在设备默认浏览器或新的 webview 中打开它
【发布时间】:2016-03-05 01:03:07
【问题描述】:

我的问题与这个问题完全相同,但适用于 Android 而不是 iOS。

Get URL from remote URL in webview and open it in safari

任何人都有想法。我正在创建一个跨平台应用程序,并且我已经使用 Clayton 的答案让它适用于 iOS,并进行了一些调整以使用控制器打开。但是当在 Android 上尝试不同的方法时,它不起作用。这与我得到的一样接近(这是 Aaron 在同一页面上提供的),而且它不太正确,因为它在新的浏览器窗口以及应用程序 web 视图中打开了远程网页:

$.floorView.addEventListener('load', function(e) {
    if (e.url.indexOf("http") !== -1) {
         // stop the event
         e.bubble = false;

         // stop the url from loading
         $.floorView.stopLoading();

         // open 
        Ti.Platform.openURL(e.url);
    }
});

谢谢!

【问题讨论】:

    标签: android url webview appcelerator appcelerator-titanium


    【解决方案1】:

    我会听beforeload 事件,虽然我不能 100% 确定您是否真的可以阻止 Webview 仍然继续加载。

    另一种方法是通过您在网页中加载或注入 (evalJS()) 的 JS 拦截这些链接。然后触发 Ti.App 事件并在 Titanium 中响应它。

    【讨论】:

      【解决方案2】:

      Titanium.UI.Webview 具有拦截链接的特定属性:onlink

      这不是作为事件实现的,因为它是一个回调,需要返回一个布尔值来告诉 Webview 是否加载链接的 URL。

      奇怪的是,立即设置 onlink 回调会使 URL 立即加载到 Safari 中,所以我是这样做的:

      $.webview.addEventListener('load', function(e) {
          $.webview.onlink = function(e) {
              Ti.Platform.openURL(e.url);
              return false;
          };
      });
      

      您当然可以检查e.url 字符串并决定是内部打开还是外部打开。

      【讨论】:

        【解决方案3】:

        我想我可能已经明白了。感谢那些想法和建议导致此代码的人。

        它在 iOS 和 Android 上似乎可以正常工作。你们有任何建议或问题,我将不胜感激。谢谢!

        if ("iOS") {    
        $.webView.addEventListener('beforeload', function(e) {
            if (e.navigationType == Titanium.UI.iOS.WEBVIEW_NAVIGATIONTYPE_LINK_CLICKED) {
               // stop the event
                e.bubble = false;
               // stop the url from loading
               $.webView.stopLoading();
               //opens up the clicked URL for bill in new webView
                var link = e.url;
                var args = {url: link,};
                // open link in my default webView for iOS
                var newWebView=Alloy.createController('defaultWebView', args).getView();
                newWebView.open();
            }
        });
        }
        else if ("Android") {
        $.webView.addEventListener('beforeload', function(e) {
            if (e.url.indexOf("http") !== -1) {
                function Parser(text) {
                    var html = text;
                    var urlRegex = /((http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
                    this.getHTML = function() {
                        return html;
                     };   
                } // end Parser
                var parser = new Parser(e.url);
                html = parser.getHTML();     
                if (html != "url of $.webView") {
                    // stop it from loding in current webView
                    $.webView.stopLoading();    
                    // open link in browser
                    Ti.Platform.openURL(html);
                }
            }
        });
        }       
        else {
        .....................
        }
        

        【讨论】:

          猜你喜欢
          • 2013-08-04
          • 2014-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-05
          相关资源
          最近更新 更多