記一次 android 的WebView 不調(diào)用javascript 中的 Image.onload 回調(diào)的問題

問題背景(都是帶WebView的頁面):

打開a頁面泞坦,關(guān)閉a頁面谤饭,打開b頁面,b頁面無法正常加載回調(diào) onload

問題查看

懷疑導(dǎo)致此問題的2個假設(shè)
1、html中的javascript代碼有問題
2讹俊、WebView 的 settings 設(shè)置有問題

問題排除1:

1、html中的javascript代碼有問題
在本地加了個本地html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="onloadTest" style="background: #000; color: #fff;"></div>
    <script>
        var imageUrl = "https://bkimg.cdn.bcebos.com/pic/b8389b504fc2d56206e31a90e31190ef77c66ce0?x-bce-process=image/resize,m_lfit,w_268,limit_1/format,f_jpg"
        function createImage(src) {
            var img = new Image();
            img.onload = function () {
                document.querySelector("#onloadTest").innerText = "onload 已調(diào)用";
            };
            img.src = src;
        }        
        createImage(imageUrl)
    </script>
</body>
</html>
問題排查:
 1、打開a頁面茎活,在a頁面中進(jìn)行加載此html,a頁面正常加載回調(diào) onload
 2琢唾、打開b頁面载荔,在b頁面中進(jìn)行加載此html,b頁面正常加載回調(diào) onload
 3采桃、打開a頁面懒熙,關(guān)閉a頁面,打開b頁面普办,在b頁面中進(jìn)行加載此html工扎,b頁面無法正常加載回調(diào) onload
 4、打開a頁面衔蹲,關(guān)閉a頁面肢娘,打開b頁面,在b頁面中進(jìn)行加載此html舆驶,b頁面無法正常加載回調(diào) onload橱健,關(guān)閉app(非后臺強(qiáng)制關(guān)閉app),打開b頁面沙廉,在b頁面中進(jìn)行加載此html拘荡,b頁面無法正常加載回調(diào) onload
 5、打開a頁面撬陵,關(guān)閉a頁面珊皿,打開b頁面,在b頁面中進(jìn)行加載此html袱结,b頁面無法正常加載回調(diào) onload亮隙,后臺強(qiáng)制關(guān)閉app,打開b頁面垢夹,在b頁面中進(jìn)行加載此html溢吻,b頁面正常加載回調(diào) onload
小結(jié):
 1、正常打開頁面能正常回調(diào)onload
 2促王、打開a頁面后犀盟,只要沒有把app強(qiáng)制關(guān)閉,則打開b頁面一直不會回調(diào)onload
 3蝇狼、所以確認(rèn)非html中的javascript代碼問題

問題排除2:

2阅畴、WebView 的 settings 設(shè)置有問題
final WebSettings webSettings = getSettings();
webSettings.setUserAgentString(QooUtils.getQooWebViewUserAgent(this));
webSettings.setAllowFileAccess(false);
webSettings.setBuiltInZoomControls(false);
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setSupportZoom(true);
webSettings.setDisplayZoomControls(false);
if (Build.VERSION.SDK_INT < 18) {
    webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);
}
webSettings.setDatabaseEnabled(true);
if (Build.VERSION.SDK_INT < 19) {
    webSettings.setDatabasePath(databaseDir);
}
問題排查:
  一個個設(shè)置去除,或全部去除迅耘,都還是同樣存在這個問題
小結(jié):
 1贱枣、妹的,什么鬼颤专,都全干完了啊纽哥,還不對!F茱酢4核!

靈魂拷問:
    經(jīng)過兩次驗證簇捍,兩個懷疑的對象都沒有問題只壳,難道是手機(jī)問題?暑塑?吼句??
    于是找來了另兩部手機(jī)進(jìn)行測試梯投,問題同樣存在C健!分蓖! ***x*********x

再一次分析:

1尔艇、既然不是b頁面的問題,那就是a頁面的問題么鹤,找出a頁面與b頁面中的對webview 的使用有什么差異终娃??蒸甜?
一致的內(nèi)容:
  1棠耕、初始化一致;
  2柠新、settings 設(shè)置一致窍荧;
不一致的內(nèi)容:
  1、a頁面調(diào)用了WebView的 onResume() 和 onPause() 方法恨憎;
嗯蕊退,肯定是這里面的不一樣導(dǎo)致的:

進(jìn)入到WebView的 onResume() 和 onPause() 方法查看郊楣,果然,這個WebView是自定義的瓤荔,在這兩個方法中增加?xùn)|西

@Override
public void onResume() {
    if (Build.VERSION.SDK_INT >= 11) {
        super.onResume();
    }
    resumeTimers();
}

@Override
public void onPause() {
    pauseTimers();
    if (Build.VERSION.SDK_INT >= 11) {
        super.onPause();
    }
}

resumeTimers() 和 pauseTimers() 是什么鬼净蚤??输硝?今瀑??

于是上網(wǎng)搜了一下点把,最終在下這個博客中找到了原因:
https://blog.csdn.net/liuwan1992/article/details/83658848

大概的意思如下:
問題:打開兩個 WebView 頁面橘荠,關(guān)閉其中一個頁面,另一個頁面中的部分操作不再響應(yīng)愉粤。
這個問題是由于 pauseTimers 導(dǎo)致的砾医,因為 pauseTimers 會暫停所有 WebView 的 layout、parsing 和 JavaScript timers衣厘,這是一個全局生效的方法,導(dǎo)致的結(jié)果是全局的 WebView 都被停止了 js 的調(diào)用压恒。 

總結(jié):

1影暴、自己還是太水了
2、有些api不能亂用
3探赫、懷疑的對象不夠廣

最終的解決方案是去除resumeTimers() 和 pauseTimers() 的調(diào)用型宙,當(dāng)然在其它頁面的 onResume() 及 onPause() 也是可以的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伦吠,一起剝皮案震驚了整個濱河市妆兑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毛仪,老刑警劉巖搁嗓,帶你破解...
    沈念sama閱讀 210,835評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異箱靴,居然都是意外死亡腺逛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評論 2 383
  • 文/潘曉璐 我一進(jìn)店門衡怀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棍矛,“玉大人,你說我怎么就攤上這事抛杨」晃” “怎么了?”我有些...
    開封第一講書人閱讀 156,481評論 0 345
  • 文/不壞的土叔 我叫張陵怖现,是天一觀的道長茁帽。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么脐雪? 我笑而不...
    開封第一講書人閱讀 56,303評論 1 282
  • 正文 為了忘掉前任厌小,我火速辦了婚禮,結(jié)果婚禮上战秋,老公的妹妹穿的比我還像新娘璧亚。我一直安慰自己,他們只是感情好脂信,可當(dāng)我...
    茶點故事閱讀 65,375評論 5 384
  • 文/花漫 我一把揭開白布癣蟋。 她就那樣靜靜地躺著,像睡著了一般狰闪。 火紅的嫁衣襯著肌膚如雪疯搅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,729評論 1 289
  • 那天埋泵,我揣著相機(jī)與錄音幔欧,去河邊找鬼。 笑死丽声,一個胖子當(dāng)著我的面吹牛礁蔗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雁社,決...
    沈念sama閱讀 38,877評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼浴井,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了霉撵?” 一聲冷哼從身側(cè)響起磺浙,我...
    開封第一講書人閱讀 37,633評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎徒坡,沒想到半個月后撕氧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,088評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡崭参,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,443評論 2 326
  • 正文 我和宋清朗相戀三年呵曹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片何暮。...
    茶點故事閱讀 38,563評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡奄喂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出海洼,到底是詐尸還是另有隱情跨新,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評論 4 328
  • 正文 年R本政府宣布坏逢,位于F島的核電站域帐,受9級特大地震影響赘被,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肖揣,卻給世界環(huán)境...
    茶點故事閱讀 39,827評論 3 312
  • 文/蒙蒙 一民假、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧龙优,春花似錦羊异、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宰衙,卻和暖如春平道,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背供炼。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評論 1 264
  • 我被黑心中介騙來泰國打工一屋, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人劲蜻。 一個月前我還...
    沈念sama閱讀 46,240評論 2 360
  • 正文 我出身青樓陆淀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親先嬉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,435評論 2 348