最近使用 uni-app 開發 app ,需要實現一個調起手機攝像頭掃描二維碼功能,官網API文檔給出了這樣一個demo:
// 允許從相機和相冊掃碼 uni.scanCode({ success: function (res) { console.log('條碼類型:' + res.scanType); console.log('條碼內容:' + res.result); } });
該示例確實可以調起手機攝像頭,但掃描后沒有結果。但它打印了 條碼類型 與 條碼內容 ,我們控制台查看一下:
條碼類型具體參考 官方API文檔,寫的非常清楚,我們主要談一下條碼內容。不難發現,條碼內容的 URL 是由 res.result 產出,那么問題來了,這個 URL 可以訪問嗎?
帶着好奇心,我來到了瀏覽器地址欄…發現正常訪問,這時我就在想,只要掃碼后跳轉到這個 URL 不就可以完成了嗎!
最后,我使用了 HTML5+ 的 openURL API 完成外部鏈接的跳轉,我們先來看一下 API 介紹:
HTML5+ 官網 API 文檔:http://www.html5plus.org/doc/zh_cn/runtime.html#plus.runtime.openWeb
1. 語法及介紹
描述:調用第三方程序打開指定的URL
void plus.runtime.openURL( url, errorCB, identity )
2. 參數與返回值
- url: ( String ): 必選,要打開的URL地址,字符串類型,各平台支持的地址類型存在差異,參考平台URL支持表。
- errorCB: ( OpenErrorCallback ) :可選,打開URL地址失敗的回調,打開指定URL地址失敗時回調,並返回失敗信息。
- identity: ( String ) :可選,指定打開URL地址的程序名稱,在iOS平台此參數被忽略,在Android平台為程序包名,如果指定的包名不存在,則打開URL地址失敗。
返回值:void(無)
最后完善一下前面的示例,讓其支持掃描二維碼並跳轉到相應地址:
uni.scanCode({ success: function (res) { void plus.runtime.openWeb(res.result,function(){ // 識別失敗代碼 }); } });