androidurlwebviewappceleratorappcelerator-titanium

Android Appcelerator Get URL from remote URL in webview and open it in devices default browser or a new webview


My question is exactly the same as this one but for Android and not iOS.

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

Anyone have an idea. I am creating a cross-platform app and I have used the Clayton's answer to get it to work for iOS with some tweaks to open with a controller. But when trying different methods on Android and it is not working. This is as close as I have gotten (which is what Aaron provided on that same page) and it is not quite right as it opens the remote web page in a new browser window as well in the apps webview:

$.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);
    }
});

Thanks!


Solution

  • I think I may have figured it out. Thanks to those whose ideas and suggestions lead to this code.

    It appears to be working as I want on iOS and Android. Any suggestions or issues that you guys have I would appreciate the feedback. Thanks!

    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 {
    .....................
    }