簡體   English   中英

使用Cordova / jQuery-mobile在外部設備瀏覽器中打開鏈接

[英]Opening links in external device browser with Cordova/jQuery-mobile

我的應用中有很多鏈接。 我為所有人添加了rel='external' target='_blank'

在Ripple模擬器中,或在常規桌面瀏覽器中,這非常有用。 但是在我的Android(JB 4.2.2)上,它會在同一個窗口中打開鏈接。 點擊“返回”會帶我回到應用程序,但是一切都搞砸了,應用程序無法按計划運行(腳本事件沒有反應),直到物理重新加載。

如何確保在設備的瀏覽器中打開鏈接? 我需要使用Cordova插件嗎?

(我正在使用Cordova 2.9.0,jQuery 1.10.1,jQuery Mobile 1.3.1)

這已與科爾多瓦/ PhoneGap的真善變,在過去幾個版本,我相信,因為的InAppBrowser這可能是你的解決方案的工作。

我們在外部瀏覽器中啟動的工作是:

window.open("http://myurl.com", '_system');

在我們的例子中,我們希望找到所有外部鏈接並在Safari / Chrome中啟動它們(並在我們的Angular路由器中保留內部鏈接)。 這可能不是最優雅的解決方案,但我們現在通過捕獲鏈接上的輸入事件並接管這樣的行為來做到這一點:

        $(document).on('mousedown','a', function(e) {
            e.preventDefault();
            var elem = $(this);
            var url = elem.attr('href');
            if (url.indexOf('http://') !== -1) {
                window.open(url, '_system');
            }
        });

我希望對你有所幫助。

在用戶返回iOS中的應用程序后,我遇到了Jason Farnsworth的答案仍然觸發默認操作的問題。 所以在對他的代碼進行了一些調整后,我得到了以下內容,並且表現得如預期的那樣。

$(document).on('click', 'a', function (e) {
   var elem = $(this);
   var url = elem.attr('href');
   if (url.indexOf('http://') !== -1) {
       e.preventDefault();
       window.open(url, '_system');
       return false;
   }
});

有幾個像這樣的問題,但他們都嘗試使用inappbrowser。 我使用了以下插件:

com.byhook.cordova.chromelauncher

只需通過cli安裝它:

cordova plugin add com.byhook.cordova.chromelauncher

並添加以下JavaScript代碼:

ChromeLauncher.open(url)

這將:

  1. 將您的應用程序置於后台模式
  2. 打開“google chrome for android”瀏覽器的現有實例(根據代碼,如果找不到Chrome瀏覽器,Google Play將被打開,但我還沒有測試過這個)
  3. 向Chrome瀏覽器添加一個新標簽,指向所需的網址

我已經搜索了年齡的正確答案,並設法解決了除了已經給出的答案之外的另一種方式。

首先,當您在較新版本的Android上使用某些方法時,舊版本的Cordova似乎會中斷。 將Cordova更新到最新版本會在當前項目中帶來一些可能的遷移問題,但值得更新。 從2.8更新到Cordova 5.0,花了我大約半小時更改代碼(只需要幾個修復)。 之后成功重建,部署和發布。 后退按鈕使我的應用程序在舊版本的Cordova中崩潰。 較新的版本使它像一個具有相同代碼行的魅力。 長話短說,更新cordova,如果需要改變幾行,重建你的美麗。

希望這可以幫助你避免像我一樣掙扎的日子。

你可以刪除目標屬性

僅使用“rel”屬性

我希望它可以解決你的問題,因為我多次面對這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM