日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解决Webview加载不完全导致部分js无效

發布時間:2024/4/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决Webview加载不完全导致部分js无效 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題出現

有兩種情況:
一種情況是打開activity時webview開始加載頁面,但是發現加載了一部分后就停止了,余下的一直不再加載。但是當關閉這個activity時發現webview又繼續加載了。

第二種情況是webview正常加載,但是進行操作時發現有些操作沒有反應。比如接入支付寶國際sdk,未裝支付寶app而使用h5頁面時出現點擊無反應的情況。

問題解析

進過反復測試發現,是因為有兩個含有webview的activity:activityA和activityB。在activityA的onPause和onResume中分別有mWebView.pauseTimers()和mWebView.resumeTimers(),但是activityB中沒有。先打開activityA加載web頁面,然后打開activityB,因為activityB沒有resumeTimers,他的部分js未成功加載,所以出現上面的現象。

問題根源

問題的根源就是WebView的pauseTimers()和resumeTimers()這兩個方法。它們的源碼及注釋如下

/*** Pauses all layout, parsing, and JavaScript timers for all WebViews. This* is a global requests, not restricted to just this WebView. This can be* useful if the application has been paused.*/ public void pauseTimers() {checkThread();mProvider.pauseTimers(); }/*** Resumes all layout, parsing, and JavaScript timers for all WebViews.* This will resume dispatching all timers.*/ public void resumeTimers() {checkThread();mProvider.resumeTimers(); }

可以看到這兩個方法都是全局的,可以停止所有WebView的加載。所以當打開activityB的時候走了activityA的生命周期onPause,這樣執行了pauseTimers(),而因為是全局的所以作用到所有的webview,所以activityB的webview也被pause而停止了加載,同時因為activityB的生命周期中并沒有實現這兩個函數,所以在pauseTimers()后沒有執行resumeTimers(),所以activityB的web頁面被pause后也沒有恢復,這樣就導致了一部分js代碼沒有加載,這樣相關的效果就失效了。

解決方法

總結

以上是生活随笔為你收集整理的解决Webview加载不完全导致部分js无效的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。