2015-05-01 69 views
4

我使用Cordova的inappbrowser插件在我的應用程序中顯示Web部件。在網站上有共享鏈接,例如對於WhatsApp的:如何優雅地中斷在Cordova的InAppBrowser中加載某個URL並在系統瀏覽器中打開它?

<a href="whatsapp://send?text=Check this out">Share on WhatsApp</a> 

現在點擊inappbrowser這些鏈接的時候,它只是嘗試加載whatsapp://send?...的URL,並顯示一個錯誤頁面。

我想做的事情是使用給定系統的瀏覽器/ URI處理程序以whatsapp://開頭的打開鏈接,因此它類似於在系統瀏覽器中單擊此類鏈接時的行爲。要做到這一點,我做了以下內容:

urlChanged = function(event) { 
    // when a "whatsapp://" link is clicked, open it in the system browser 
    if(event.url.startsWith("whatsapp://")) { 
     window.open(event.url, "_system"); 
     return; 
    } 
} 
// Add an "loadstart" event listener to the inappbrowser:  
browser.addEventListener("loadstart", urlChanged); 

到目前爲止,這一定程度上有效,但怪癖:

  1. 而當用戶點擊一個WhatsApp的鏈接事件立即觸發(檢查,通過發射一個警報),系統瀏覽器實際打開需要兩到三秒的時間。
  2. 在等待這些2-3秒並返回到應用程序時,用戶會看到一個inappbrowser錯誤頁面,指出whatsapp://鏈接無法打開(「未知url方案」)。

爲了減輕2點,我也試過在事件偵聽器的下面,都沒有成功(的行爲是完全一樣的):

urlChanged = function(event) { 
    if(event.url.startsWith("whatsapp://")) { 
     // stop loading the whatsapp:// link in inappbrowser 
     browser.stop(); 
     // go back in history to display page where whatsapp:// link was on 
     browser.history.back(); 
     window.open(event.url, "_system"); 
     return; 
    } 
} 
browser.addEventListener("loadstart", urlChanged); 

你可以指導我如何解決點1和2 ?

+0

你解決了嗎?我面臨同樣的問題:( – vbotio

+0

我面臨着同樣的問題,你使用的任何解決方案? –

+0

我找到了一個可行的解決方案,它不是完美的,但爲我的目的而工作。 – fjc

回答

0

所以我結束了下面的代碼:

openWithSystemBrowser = function(url) { 
    window.open(url, "_system"); 
    location.href = "index.html"; 
}; 

shareOnWhatsapp = function(url) { 
    openWithSystemBrowser(url); 
}; 

/** 
* Handles URL changes in in-app browser, e.g. to handle logouts or 
* unsuccessful logins 
*/ 
urlChanged = function(event) { 
    if(event.url.startsWith("http://whatsapp://")) { 
     shareOnWhatsapp(event.url.substr("http://".length)); 
     return; 
    } 
    if(event.url.startsWith("whatsapp://")) { 
     shareOnWhatsapp(event.url); 
     return; 
    } 
}; 

當然,這是略跛爲你總是帶回index.html的,但對於我而言這已經足夠了。有興趣看看有沒有人找到更優雅的解決方案。

它也解決了在打開系統瀏覽器之前2-3秒的延遲,但我沒有任何線索,坦白地說。

相關問題