2

我正在使用 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。仅仅为了这件事而包含它是否值得?

4

2 回答 2

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'));
    });
});
于 2013-02-02T23:01:38.370 回答
1

您还可以使用正则表达式专门为以“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 构建。

于 2013-12-17T23:08:40.957 回答