2013-02-02 72 views
2

我正在开发一个使用Sencha Touch 2和Cordova 2.3.0的移动应用程序。 我希望能够打开所有外部链接(从动态加载的HTML)到新的InAppBrowser。PhoneGap/Cordova 2.3 .:如何打开InAppBrowser中的所有外部链接?

有没有办法实现这一点,而不必修改所有包含target =“_ blank”的外部链接?

我想拦截点击外部链接并使用InAppBrowser的window.open API打开它们。 因为我同时定位iOS和Android,我想JavaScript解决方案会更好地避免单独的代码(Java和Objective-C)。

谢谢!

更新:我刚刚发现这一点: https://gist.github.com/4694032

与此唯一的问题是,我没有在我的应用程序使用jQuery。包括它仅仅是为了这件事情,值得吗?

+0

不,这不值得。应该很容易转换脚本。顺便说一句,如果你找到答案,请发表一个答案,引用来自外部网站的代码。 –

+0

谢谢。我找到了我通过谷歌发布的链接,而不是通过SO。 – borck

回答

3
Ext.each(Ext.query('a'), function(el) { 
    el = Ext.get(el); 
    el.on('click', function(e) { 
     e.preventDefault(); 
     console.log('clicked', el.getAttribute('href')); 
    }); 
}); 
+0

这很好,但我仍然有问题。我的应用程序连接到PHP脚本来填补商店,其中包括应用程序的多个页面显示的html数据。是否有可能在一个查询中获得所有''元素,而不仅仅是当前页面上显示的元素?换句话说,是否有可能一次查询应用程序的所有外部链接? – borck

+1

在这种情况下,这将适用于您:http://stackoverflow.com/a/13567152/273985 – rdougan

+0

正是我在找什么,非常感谢! – borck

1

您也可以专门添加此事件的属性(HREF),其以“http”开头,使用正则表达式:

Ext.Viewport.element.dom.addEventListener('click', function (e) { 
    if (e.target.tagName !== 'A') { 
     return; 
    }; 

    var url = e.target.getAttribute('href'); 
    var containsHttp = new RegExp('http\\b'); 

    //if href value begins with 'http' 
    if(containsHttp.test(url)) { 
     e.preventDefault(); 
     window.open(url, "_system"); // For iOS 
     navigator.app.loadUrl(url, {openExternal: true}); //For Android 
    } 
    else { 
     return; 
    } 
}, false); 

然后你可以在同一时间建立Android和iOS。

相关问题