iOSバージョン10以前では、UIWebView
にロードされたJavaScript/HTMLからの情報を私に送り返すことができました文書上のiFrameを作成するか、Web表示が負荷にしようとしたでしょうカスタムURLにdocument.location.href
を設定することにより、アプリケーション:UIWebViewからカスタムURLスキームを使用したiOSアプリケーションにデータを送信するXcode 8/iOS 10で壊れます
<html>
<body><input id="clickMe" type="button" value="clickme" onclick="changeWindow();" /></body>
<script type="text/javascript">
function changeWindow() {
//create temp frame
iFrame = this.createIFrame('onStatusChange://eyJ1c2VyTmFtZSI6IkpBTCIsLCJwcm92aWRlciI6IkVtYWlsIn0=');
//remove the frame now
iFrame.parentNode.removeChild(iFrame);
}
function createIFrame(src) {
var rootElm = document.documentElement;
var newFrameElm = document.createElement('IFRAME');
newFrameElm.setAttribute('src', src);
rootElm.appendChild(newFrameElm);
return newFrameElm;
}
</script>
</html>
次に、クライアント上で、私はちょうどUIWebViewDelegate
コールバックwebView:shouldStartLoadWithRequest:navigationType:
をリッスンし、かを確認しますrequest.URL.scheme
が自分のカスタムスキーム(この場合はonStatusChange
)と等しい場合。
これは、普及している質問(How to invoke Objective C method from Javascript and send back data to Javascript in iOS?など)のように、JavaScriptとiOSアプリの間で通信する一般的な方法です。
これは、iOS 9および10デバイスでXcode 7(Objective-CまたはSwift)で構築されたすべてのアプリで使用できます。私は、Xcode 8で構築されたアプリケーションでデリゲートメソッドが呼び出されない問題に取り掛かりました。それは、WebビューがURLをロードしようとしていなくてもデリゲートコールバックをトリガーしていないかのようです。
UIWebView
またはWebKitがXcode 7から8またはiOS 9から10に変更されましたが、これは動作しませんでしたか?本当に困惑しているのは、iOS 8をターゲットにしたXcode 7のObjective-Cで制作した制作アプリは、iOS 10デバイスで動作しますが、まったく同じコードベースのXcode 8で構築されたデバッグビルドは動作しません。
rdarの更新はありますか?私はiOS 10.2.1でもそれが起こっているのを見ています。また、特別なチャーもなくても私たちに起こります。 – Aviel
@Aviel悲しいことに、私のレーダーはまだ更新されておらず、ランクがない "オープン"とマークされています。あなたはバグレポートを複製し、複数の人にこの問題があることをAppleに示すために新しいレーダーを提出することを検討することができます。 – JAL
@Avielバグレポートを複製してOpenRadarに投稿しましたので、他の開発者がレポートを見ることができますか? – JAL