2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS10でiFrameを使いWebViewからデータをネイティブに送信する方法

Posted at

iOS9までは、ほぼ絶対に実在しないドメイン(JSBridge://ActionId/等)をiframeのsrcに追加して、ネイティブ側でそのコールをフックして処理をすることができた。
しかし、iOS10からは実在しないドメインを使用している場合は出来なくなった。

対策

これが分かりやすかった: iFrame、JSBridge 升级Xcode8和iOS 10之后的解决方案

抜粋:

3.一直使用的JSBridge不能用了
开发Hybrid App的同学应该都知道,其实js和native通信关键的就是

var iFrame = document.createElement("IFRAME");
iFrame.setAttribute("src","JSBridge://ActionId=" + id);
document.documentElement.appendChild(iFrame);
iFrame.parentNode.removeChild(iFrame);
然后会在UIWebView的回调方法-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;中去解析截获的src属性中的ActionId值,但是很不幸在Xcode8打包到iOS 10的设备中,在UIWebView的回调方法中request参数中的URL是空的,什么也没有。这个问题的根本原因是上面动态添加的

iFrame.setAttribute("src","JSBridge://customeHost?ActionId=" + id);

文/马修王(简书作者)
原文链接:http://www.jianshu.com/p/c69d5112b3ae
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

つまり

iframeのsrcに使用しているURLを実在しそうなホストにすればいい。(OLDをNEWにすればいい)
大文字ABCDEFGから小文字のabcdefgにしたのはうまくうごかなかったから。

  • OLD: ABCDEFG://call/id=1
  • NEW: abcdefg://project_name.com/call/id=1

MEMO

  • これに起因する問題は大きく分けて2つおこった
    • LINE@のページを表示させているとき、line://foo/barで、LINEアプリのLINE@を開けなくなった。

      • 対策: LINE@ 内のdata-hrefを書き換えるJSをロード完了時に流し込む形で対応した。
    • 自社サービスのWEBページ内からデータ(イベント/呼び出し)を受け取れなくなった

      • 対策:AndroidとiOS側で呼び出しコールを変えるのは大変だっため、iOS側のネイティブコードで呼び出し方法を変えた。
      • 以下にOLDからNEWに変えるJSを流し込む形で対応した
        • OLD: ABCDEFG://call/id=1
        • NEW: abcdefg://project_name.com/call/id=1

参考

最後に

書き換えしたいφ('ᴗ'」)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?