作項目的時候,項目中有個需求,須要經過網頁打開app,聽到這個功能,我先是蛋疼了一會,可是在網上查了一下資料發現原理其實很簡單,本質就是經過瀏覽器輸入咱們本地android程序的路徑,不過這個路徑須要咱們在android中AndroidManifest.xml聲明一下 android
<activity android:name=".LoadingActivity" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <intent-filter>//配置能夠經過瀏覽器啓動Intent <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="splash" //路徑 android:scheme="zhu" /> //本身定義的協議 </intent-filter> </activity>
這個地方配置了後,咱們能夠試到在瀏覽器上輸入zhu://splash 瀏覽器
這會自動的跳轉到搜索頁面,這是由於瀏覽器若是發現地址的前綴不是http等常見的協議就會自動跳到搜索的頁面,某些還會在前面自動加上http。 app
既然這樣沒辦法,那我就直接寫了個js代碼來實現這跳轉 spa
window.location = "zhu://splash";
訪問js頁面 code
項目的需求以後又變了一下,不只要打開咱們的App還要判斷當沒有App的時候自動下載它 xml
代碼以下: 事件
<script> (function(){ var t; function openclient() { //判斷在規定時間內是否能夠打開app,若是超時就代碼沒有安裝對應的app 跳到下載頁面。 var startTime = Date.now(); window.location = "zhu://splash"; var t = setTimeout(function() { var endTime = Date.now(); if (endTime - startTime < 800) { window.location = 「你的下載地址」; } }, 600); window.onblur = function() { clearTimeout(t); } } window.addEventListener("DOMContentLoaded", function(){ //添加監聽事件 openclient(); }, false); })() </script>