瀏覽器內外跳 -- 跳轉到指定應用

Android Intents with Chrome

Android中一個不爲人知的功能,可以讓您經過Android Intent直接從網頁啓動應用程序。一種方案是當用戶到達頁面時啓動應用程序,您能夠經過在自定義URI方案設置爲src的頁面中嵌入iframe來實現,以下所示:<iframe src =「paulsawesomeapp://page1」 > </iframe>。此功能適用於Chrome for Android瀏覽器,版本18及更早版本。固然,它也工做在Android瀏覽器。javascript

Chrome(Android版)25以上版本的功能已略有變化。沒法再經過設置iframesrc屬性來啓動Android應用。例如,使用自定義方案(如paulsawesomeapp://)將iframe導航到URI,即便用戶安裝了相應的應用程序,也不會工做。相反,您應該實現經過用戶手勢自定義方案啓動應用程序,或使用本文中描述的intent:語法。html

語法

最佳實踐是構造一個意圖錨點並將其嵌入到頁面中,以便用戶能夠啓動應用程序。這爲您提供了更多的靈活性,以控制如何啓動應用程序,包括經過Intent Extras傳遞額外的信息到應用程序的能力。java

基於意圖的URI的基本語法以下:android

intent:
    HOST/URI-path // Optional host 
   #intent;
      package = [string];
      action = [string];
      category = [string];
      component = [string];
      scheme = [string];
   end;複製代碼

查看Android源代碼來了解解析細節。git

此外,您能夠選擇經過添加如下字符串來指定回調網址:github

S.browser_fallback_url=[encoded_full_url]複製代碼

當沒法解析意圖或沒法啓動外部應用程序時,若是給定了回調網址,用戶將會被重定向到回調網址。chrome

Chrome不啓動外部應用程序的一些示例狀況以下:瀏覽器

  • 沒法解析意圖,即沒有應用程序能夠處理意圖。
  • JavaScript計時器試圖打開一個沒有用戶手勢的應用程序。

注意S.<name>是一種定義字符串附加的方法。選擇S.browser_fallback_url是爲了向後兼容,但目標應用程序不會看到browser_fallback_url值,Chrome會刪除它。安全

例子

這裏有一個意圖,啓動Zxing條碼掃描器應用程序。它遵循如下語法:app

intent:
   //scan/
   #Intent; 
      package=com.google.zxing.client.android; 
      scheme=zxing; 
   end;複製代碼

要啓動Zxing條形碼掃描器應用程序,您須要在錨上對href進行編碼,以下所示:

<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"> Take a QR code </a>複製代碼

參見Android Zxing Manifest,它定義了包和主機。

此外,若是指定了回調網址,則完整網址將以下所示:

<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;S.browser_fallback_url=http%3A%2F%2Fzxing.org;end"> Take a QR code </a>複製代碼

如今,若是沒法找到應用程序,或者連接是由沒有用戶手勢的JavaScript觸發的(或者咱們不啓動外部應用程序的其餘狀況),則URL將使您進入zxing.org

href = "intent:mydata#Intent;action=myaction;type=text/plain;end"複製代碼

從用法上看,仍是很好理解的,這裏的代碼等價於以下Java代碼:

Intent intent = new Intent("myaction");  
intent.setData(Uri.parse("mydata"));  
intent.setType("text/plain");複製代碼
intent://foobar/#Intent;action=myaction;type=text/plain;S.xyz=123;i.abc=678;end複製代碼

上面的語句,等價於以下Java代碼:

Intent intent = new Intent("myaction");  
intent.setData(Uri.pase("//foobar/"));  
intent.putExtra("xyz", "123");  
intent.putExtra("abc", 678);複製代碼

注意事項

  • 若是經過intent調用的activity包含extras功能,您也應該包括這些extras功能。

  • 只有具備category filteractivityandroid.intent.category.BROWSABLE可以使用此方法調用,由於它表示該應用程序能夠安全地從瀏覽器打開。

在下列狀況下,Chrome不會爲指定的Intent URI啓動外部應用程序。

  • Intent URI從鍵入的URL重定向時。
  • Intent URI啓動時沒有用戶手勢。
相關文章
相關標籤/搜索