2013-02-02 32 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。

相關問題