安卓內嵌 webview 不能執行 javascript 的原因
安卓內嵌 webview 不能執行 javascript 的原因:
-
webview 的設定不對。在 RN 框架裡面使用的webview 預設設定是不會有這個問題的。所以不用怎麼懷疑RN的配置。可檢查的引數
-
settings.setJavaScriptEnabled(true);
-
settings.setDomStorageEnabled(true);
-
-
WebView.setWebChromeClient(new WebChromeClient()); 是否有裝置。 RN 框架預設是有設定的。
-
因為 webview 核心差異,有的手機可以,有的外部瀏覽器可以但內嵌瀏覽器不可以。這是因為各種核心各個版本的瀏覽器核心對javascript語言的支援不一樣,特性不一樣。比如 ES6 的支援,只要網頁程式碼裡面出現 es6 的東西比如 let 宣告,一些低版本的系統(android 5.x 以及以下)不能正常執行,並且在 js 的節點裡面的所有 js 程式碼,都會失效,包括 console.log , alert 等跟蹤日誌的手段都沒用了。
-
當需要訪問其他協議進行跳轉的時候不能開啟微信、支付。需要檢查 shouldOverrideUrlLoading 裡面是否有做 intent 的跳轉。(只是最近碰到的問題,列在一起)
-
系統瀏覽器對一些控制元件做了限制,比如 vivo android 5.1.1 系統裡面,把 alert 給遮蔽掉了。
-
其他待補充
除錯小結:
-
安卓如何檢視 webview 內的輸出日誌( console.log ) ?
-
安卓使用 chrome 進行除錯內嵌瀏覽器:
-
-
在原始碼裡面找到 webview 建立的地方,插入程式碼: WebView.setWebContentsDebuggingEnabled(true); 。
-
在電腦上開啟 chrome - dev tool(快捷鍵 command + option + i)
-
點 更多- more tool - remote device 。
-
看到已經連上的安卓裝置,選擇展示出來的這個手機上已經顯示的網頁連結 右側有一個 【inspect】,點選之後,就可以實時除錯了。需要重新重新整理網頁的話,也只需要 command + r
-
-
再補充一個蘋果除錯網頁方式
-
-
iphone 裡面 設定-safari -高階選項 - 開啟“javascript” 和 “web 檢查器"
-
電腦上開啟 safria , 偏好設定 - 高階 - 勾選“在選單欄中顯示 開發 選單”
-
safria - 開發 - xxx 的 iphone - 選擇一網頁
-
ok 可以除錯了
-
各個手機上網頁展示不同的原因主要是 核心差異。核心的差異點有 ??? 當碰到這個手機可以,那個手機不可以的時候,對比一下安卓系統版本,瀏覽器版本,品牌。