iOS 8 WebViewがクライアントを呼び出せないという問題を解決

1142 ワード

Webページを参照するためにWebViewをクライアントに埋め込むのはよくあります.現在のプロジェクトではphonegapは使用されず、iframe伝達パラメータを自分で書いた(原理はphonegapと似ている).
iOS 5-7は正常に呼び出すことができるコードです.
<iframe src="http://qq.com" style="width:200px;"></iframe>

<script>
function foo(){
	document.querySelector('iframe').src='bar://foo?json=' + JSON.stringify({a:1,b:'2'});
}

</script>
<br />
<br />
<br />
<a href="javascript:foo();">foo</a>

しかしiOS 8にアップグレードした後、突然開かなくなった.Obj-Cレイヤはこのbar://リクエストをブロックしていません.
後で調べたところ、bar://このURIはURLコードがないからです.解決策はencodeURIComponent JSONパラメータでよく、中国語の伝送も保証できます.
以下の例を示します.
<iframe src="http://qq.com" style="width:200px;"></iframe>

<script>
function foo(){
	document.querySelector('iframe').src='bar://foo?json=' + encodeURIComponent(JSON.stringify({a:1,b:'2'}));
}

</script>
<br />
<br />
<br />
<a href="javascript:foo();">foo</a>

Apple側が何かセキュリティホールを塞ぐためにURLコードを要求したとみられる.