2013-05-02 96 views
2

我有一個基於cordova 2.6和jqm 1.3構建的iOS/Android應用程序。我需要在用戶點擊一個按鈕後打開一個到外部網站的鏈接。我正在使用的代碼是:Phonegap window.open不適用於Android

var ref = window.open('http://google.com','_self','location=yes'); 
ref.addEventListener('loadstart',function(event) { 
    console.log('load started'); 
}); 
ref.addEventListener('loadstop',function(event) {  
    console.log('load stopped'); 
}); 
ref.addEventListener('loaderror',function(event) { 
    console.log('load error = ' + JSON.stringify(event)); 
}); 

在iOS上,一切都像我所期望的那樣執行。隨着谷歌網站的加載,一個新的瀏覽器窗口打開。但我無法在Android中加載任何內容。當我點擊按鈕時,沒有任何反應。我已經在window.open之前和之後放置了控制檯語句,所以我知道代碼至少正在執行。

我config.xml中應該是敞開的白名單的網站:

<access origin=".*"/>; 

我已經在Nexus 7(安卓4.2)和Android 2.2的模擬器上都相同的結果進行測試。

有誰知道爲什麼window.open不會在android上正確觸發嗎?

+0

您的config.xml文件中列出了InAppBrowser插件嗎?你在AndroidManifest.xml中有互聯網權限嗎? – MBillau 2013-05-02 19:03:21

+0

兩者都在那裏。我剛剛使用了創建新phonegap項目時創建的基本清單。 '<使用權限android:name =「android.permission.INTERNET」/>'是在我的清單和'<插件名稱=「InAppBrowser」value =「org.apache.cordova.InAppBrowser」/>'是在我的配置.xml – whynotmatt 2013-05-02 19:56:05

+0

我剛剛在我的Nexus 7(4.2)上嘗試過使用相同的設置,但沒有問題...但是,我沒有使用jqm ...也許這可能是個問題?如果你只是用香草JavaScript啓動該功能,它是否工作?你確實說過,你正在獲取console()消息,但是......我假設在日誌中沒有任何內容? – MBillau 2013-05-02 20:05:45

回答

1

它看起來像是一個2.6在Android上加載插件的問題。我升級到2.7,一切開始工作。

+0

謝謝你。這確實是一個浪費我太多時間的phonegap bug。 – nubela 2013-06-04 19:31:40

0

也許這是使用ChildBrowser plugin的解決方案?這使您可以更多地控制操作本身,同時仍保持iOS和Android之間的平臺兼容性。

在大多數情況下,我使用類似以下片段的內容來使用childbrowser來顯示外部頁面。

function openBrowser(url) { 

    // determine if the childbrowser plugin is available 
    var useChildBrowser = ('plugins' in window && window.plugins.childBrowser); 

    if (useChildBrowser) { 
     popup = window.plugins.childBrowser; 
     popup.showWebPage(url, { showLocationBar: false, showAddress: false }); 
    } else { 
     popup = window.open(url, 'Share', "['width=600px', 'height=400px', 'resizable=0', 'fullscreen=yes']"); 
    } 
} 

注意,這回退到使用window.open如果ChildBrowser插件不可用,所以你不會打破任何其他與此有關。也許值得一試?

+0

我真的與ChildBrowser混了幾個小時,但遇到了基本相同的問題。那時候我意識到window.open是2.6核心功能的一部分,所以我決定取消ChildBrowser。 – whynotmatt 2013-05-02 19:15:17

相關問題