2017-03-21 82 views
0

我們目前有一個Cordova應用程序,需要使用POST啓動外部瀏覽器。從Cordova啓動外部瀏覽器

我們將它編碼爲使用inAppBrowser插件啓動嵌入到應用程序中的瀏覽器。

我不喜歡使用內部瀏覽器,因爲我會被指責爲在默認瀏覽器中呈現的網頁中的任何錯誤,並且不會在inAppBrowser中工作。

我們如何用POST請求啓動默認瀏覽器?

一旦瀏覽器啓動,我們不需要在瀏覽器中有一個後退按鈕,將用戶帶回我們的應用程序。

我們只關心iOS和Android。我們可以在每個平臺上使用不同的解決方案。

我已經使用Google搜索,但有太多衝突的信息;將會有一個響應,它會起作用,然後另一個人回覆說它沒有。還有一些需要注意的問題,例如,似乎可以在默認瀏覽器中打開URL,但它也會將頁面保留在應用內瀏覽器中。這會讓最終用戶感到困惑。

我已經創建了一個upwork.com項目,用來支付某人創建一個cordova插件,該插件專用於通過POST請求啓動外部瀏覽器。隨時評論任何預期的問題。

[編輯]以下是我用來測試在iOS上的步驟:

  1. 清除所有後臺任務在iPhone
  2. 啓動具有鏈接旨在啓動外部瀏覽器
  3. 點擊鏈接的應用這是爲了啓動外部瀏覽器
  4. 觀察到瀏覽器啓動
  5. 雙擊Home鍵即可顯示所有正在運行的應用
  6. 如果在默認瀏覽器中成功運行,我應該觀察原始應用程序和瀏覽器正在運行。
  7. 如果成功,我們還應該觀察到原始應用程序未顯示目標網頁。這一點很重要,因爲有些人可以啓動默認瀏覽器,但原來的應用程序仍處於顯示網頁的狀態。

回答

0

您可以通過指定目標例如在inAppBrowser中打開應用程序以外的瀏覽器。

var linkTarget =「_blank」;(使用桌面;已編碼的目標是_SYSTEM爲Android道歉。)

將帖子

<a href="#" onclick="window.open(encodeURI('https://openclipart.org/'),"_system")">openclipart.org</a>; 

這確實在應用程序無法打開網頁 - 在系統瀏覽器中打開。

如果設備設置應用程序管理器頁面中的瀏覽器默認值已被清除,該鏈接將提示用戶選擇他們的瀏覽器(我假設它以其他方式使用之前設置的默認值,儘管您可能要仔細檢查如果你正在使用人行橫道

還有其他的目標選擇,但依稀記得_system無法按預期工作 - 給它一個嘗試,如果_blank不起作用

我不認爲有任何直接啓動瀏覽器doi的方法即使你有一個特殊的插件,

看起來像使用dataUrl可能允許你打開瀏覽器做一個帖子 - 如果是這樣的概率最乾淨的方法。 (請參閱下面Wu的回答中的鏈接)[EDIT]看起來在Windows移動平臺上不起作用;見caniuse dataURIs。或者,你可以嘗試一個單獨的html文件作爲你的應用程序文件的一部分 - 如上所述加載到一個新的瀏覽器(除「file:// ..」),並讓它運行一些啓動JavaScript(也許使用查詢字符串控制)來完成這個職位,例如。通過jquery ajax調用。這種方法會存在安全問題 - 文件必須位於瀏覽器可以訪問的地方(可以將應用程序從內部www文件夾複製 - 需要讀取/寫入權限)。不知道是否會有CORS問題等。如果Windows不考慮,我肯定會首先查看dataUrl。

+0

您測試過哪些平臺? –

+0

有沒有你在做的事情,吳沒有這樣做,讓你的測試成功?例如,href =「#」是否有所作爲? –

+0

感謝鮑勃,當我使用_system替換_blank時,它工作。 –

0

貌似「_blank」不能打開URL iOS上的外部瀏覽器。 我試圖通過這樣的:
1)安裝inappbrowser插件。
2)呼叫window.open(是encodeURI( 'https://openclipart.org/'), 「_blank」);按下按鈕時按下 。
在應用程序中打開的URL,而不是外部瀏覽器。

更新:
使用 「_SYSTEM」 將在Safari中打開URL iOS上,打開網址:
1)安裝inappbrowser插件。
2)調用cordova.InAppBrowser.open(是encodeURI( 'https://openclipart.org/'), 「_SYSTEM」);

不幸的是這種方式纔有效發送GET請求。 有人建議在loadstop事件提交後的形式是這樣的: Cordova InAppBrowser post form to url

的方法工作時,目標是「_blank」,當時的目標是「_SYSTEM」,因爲在瀏覽器不應用窗口打開URL,該loadstop事件不會被辭退了。

+0

你測試過什麼平臺? –

+0

您所包含的「Cordova InAppBrowser發佈到網址的鏈接」鏈接有一個更進一步的答案,其中有人描述使用dataUrl發佈數據 - 這不需要loadstop事件/ inAppBrowser實例。 (你可能不想清除用戶的主緩存,雖然尤其是如果你使用_system) – Bob

+0

已經修改了答案。對_blank上的最初誤導抱歉。 – Bob