開發(fā)Hybrid App時哑诊,file:///加載本地html,無法渲染內(nèi)容的問題

新上手一個混合開發(fā)APP的項目及刻,需要IOS和android通過webview調(diào)用本地html文件镀裤,要求能顯示H5頁面并產(chǎn)生交互。

因為之前沒接觸過混合開發(fā)缴饭,項目在一開始就遇到了問題暑劝,ios和android在調(diào)用本地html文件時,可以引入資源颗搂,但js不能讀寫加載的內(nèi)容担猛。如路由導(dǎo)航功能渲染的頁面無法顯示,以及數(shù)據(jù)無法加載丢氢。

后面嘗試把html文件放到服務(wù)器上傅联,webview通過請求遠程地址加載html文件,發(fā)現(xiàn)顯示正常疚察,內(nèi)容和數(shù)據(jù)都能正常渲染蒸走。于是猜測是域名URL的問題,在百度上搜索“file:///加載html文件”時貌嫡,發(fā)現(xiàn)一個關(guān)鍵詞——“同源策略”比驻。

1.1该溯、先來說說什么是源

源(origin)就是協(xié)議、域名和端口號别惦,若地址里面的協(xié)議狈茉、域名和端口號均相同則屬于同源。

以下是相對于http://www.a.com/test/index.html?的同源檢測

? http://www.a.com/dir/page.html?----成功

? http://www.child.a.com/test/index.html?----失敗掸掸,域名不同

? https://www.a.com/test/index.html?----失敗氯庆,協(xié)議不同

? http://www.a.com:8080/test/index.html?----失敗,端口號不同

1.2.什么是同源策略猾漫?同源策略是瀏覽器的一個安全功能点晴,不同源的客戶端腳本在沒有明確授權(quán)的情況下,不能讀寫對方資源悯周。所以http://a.com下的js腳本采用ajax讀取http://b.com里面的文件數(shù)據(jù)是會報錯的粒督。

? 不受同源策略限制的:1、頁面中的鏈接禽翼,重定向以及表單提交是不會受到同源策略限制的屠橄。2、跨域資源的引入是可以的闰挡。但是js不能讀寫加載的內(nèi)容锐墙。如嵌入到頁面中的<script src="..."></script>,<img>长酗,<link>溪北,<iframe>等。

在明白什么是同源策略后夺脾,問題差不多已經(jīng)找到原因了之拨,繼續(xù)在網(wǎng)上查找了一番,看到一篇文章——WebView的優(yōu)化--處理WebView的容易忽略的漏洞咧叭,在這篇文章里面找到了安卓端的解決方法:

setAllowFileAccess()

// 設(shè)置是否允許 WebView 使用 File 協(xié)議

webView.getSettings().setAllowFileAccess(true);

// 默認(rèn)設(shè)置為true蚀乔,即允許在 File 域下執(zhí)行任意 JavaScript 代碼


1:禁用 file 協(xié)議;

webView.getSettings().setAllowFileAccess(false);

這樣雖然最方便菲茬,但同時也限制了WebView 的功能吉挣,使其不能加載本地的 html 文件。

2:對于需要使用 file 協(xié)議的應(yīng)用婉弹,禁止 file 協(xié)議加載 JavaScript睬魂。;

setAllowFileAccess(true);

// 禁止 file 協(xié)議加載 JavaScript

if (url.startsWith("file://") {

????setJavaScriptEnabled(false);

} else {

????setJavaScriptEnabled(true);

}


setAllowFileAccessFromFileURLs()

// 設(shè)置是否允許通過 file url 加載的 Js代碼讀取其他的本地文件

webView.getSettings().setAllowFileAccessFromFileURLs(true);

// 在Android 4.1前默認(rèn)允許

// 在Android 4.1后默認(rèn)禁止

這樣不安全镀赌,解決辦法直接關(guān)掉setAllowFileAccessFromFileURLs(false);


setAllowUniversalAccessFromFileURLs()

// 設(shè)置是否允許通過 file url 加載的 Javascript 可以訪問其他的源(包括http汉买、https等源)

webView.getSettings().setAllowUniversalAccessFromFileURLs(true);


// 在Android 4.1前默認(rèn)允許(setAllowFileAccessFromFileURLs()不起作用)

// 在Android 4.1后默認(rèn)禁止

這個一般還好,如果想保證資源的安全的話佩脊,建議關(guān)掉


setAllowUniversalAccessFromFileURLs(false);

setJavaScriptEnabled()


// 設(shè)置是否允許 WebView 使用 JavaScript(默認(rèn)是不允許)

webView.getSettings().setJavaScriptEnabled(true);

// 但很多應(yīng)用(包括移動瀏覽器)為了讓 WebView 執(zhí)行 http 協(xié)議中的 JavaScript蛙粘,都會主動設(shè)置為true垫卤,不區(qū)別對待是非常危險的。

android應(yīng)用重新設(shè)置后出牧,頁面正常顯示穴肘,內(nèi)容和數(shù)據(jù)都可以渲染,問題解決一半舔痕,剩下的就是找到ios類似的方法评抚。感謝博主Vincent__Lee,附上文章鏈接:WebView的優(yōu)化--處理WebView的容易忽略的漏洞 - li15225271052的博客 - CSDN博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伯复,一起剝皮案震驚了整個濱河市慨代,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啸如,老刑警劉巖侍匙,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叮雳,居然都是意外死亡想暗,警方通過查閱死者的電腦和手機说莫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辽狈,“玉大人,你說我怎么就攤上這事懂牧。” “怎么了僧凤?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵躯保,是天一觀的道長。 經(jīng)常有香客問我验懊,道長遏片,這世上最難降的妖魔是什么讯屈? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任怕篷,我火速辦了婚禮历筝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘廊谓。我一直安慰自己舔示,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布蜘渣。 她就那樣靜靜地躺著,像睡著了一般蔫缸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音,去河邊找鬼饲嗽。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼心赶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缺猛?” 一聲冷哼從身側(cè)響起缨叫,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荔燎,沒想到半個月后耻姥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡有咨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年琐簇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片座享。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡婉商,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出征讲,到底是詐尸還是另有隱情据某,我是刑警寧澤橡娄,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布诗箍,位于F島的核電站,受9級特大地震影響挽唉,放射性物質(zhì)發(fā)生泄漏滤祖。R本人自食惡果不足惜筷狼,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匠童。 院中可真熱鬧埂材,春花似錦、人聲如沸汤求。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扬绪。三九已至竖独,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挤牛,已是汗流浹背莹痢。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留墓赴,地道東北人竞膳。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像诫硕,于是被迫代替她去往敵國和親坦辟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容