我正在使用Sencha Touch 2和Cordova 2.3.0开发移动应用程序。 我希望能够打开所有外部链接(从动态加载的HTML)到新的InAppBrowser。
有没有办法实现这一点,而无需修改所有外部链接以包含target =“_ blank”?
我想拦截外部链接上的点击,并使用InAppBrowser中的window.open API打开它们。 由于我同时针对iOS和Android,我想一个javascript解决方案最好避免使用单独的代码(Java和Objective-C)。
谢谢!
更新:我刚发现: https://gist.github.com/4694032
唯一的麻烦是我不在我的应用程序中使用jQuery。仅仅因为这件事而包含它是否值得?
答案 0 :(得分: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'));
});
});
答案 1 :(得分:1)
您还可以使用regexp专门为以“http”开头的属性(href)添加此事件:
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构建。