WKWebView を使用してモバイル アプリを作成しています。カスタム URL スキーム image:// と thumb:// を登録して、アプリのネイティブ パーツから Web パーツにアセットを提供します。
webViewConfiguration.setURLSchemeHandler(handler, forURLScheme: "image")
webViewConfiguration.setURLSchemeHandler(handler, forURLScheme: "thumb")
このアプローチは、カスタム スキームを持つ URL が HTML で使用されている場合にうまく機能します。たとえば、<img src="thumb://watermarkly.com/1.jpg" />
適切に動作します。WKWebView はハンドラーを呼び出し、結果を表示します。ただし、XMLHttpRequest を使用してこれらの URL をフェッチしようとすると、WKWebView はリクエストをブロックします。
[Warning] The page at https://watermarkly.com/app/watermark/ was allowed to display insecure content from thumb://watermarkly.com/1.jpg.
[Warning] [blocked] The page at https://watermarkly.com/app/watermark/ was not allowed to display insecure content from image://watermarkly.com/1.jpg.
[Error] Not allowed to request resource
[Error] XMLHttpRequest cannot load image://watermarkly.com/1.jpg due to access control checks.
ここでの唯一の違いは、"thumb:" URL が img タグに割り当てられたのに対し、"image:" URL は XMLHttpRequest 経由でフェッチされたことです。残念ながら、Safari 開発者ツールには他の情報はありません。
この問題は実際のデバイスでのみ発生します。iOS シミュレーターではすべて正常に動作します。
XMLHttpRequests でも機能するように構成する必要があるものはありますか?
アップデート
問題を解決するために XHR を作成するために、HTTPS から HTTP に切り替えました。
残念ながら、一部の iPhone ではカスタム URL スキームが機能しないようです。HTTP に切り替えたり、Access-Control-Allow-Origin ヘッダー ヘルプを送信したりしていない iPhone を使用している 5 人の顧客がいます。問題の原因となっている設定を特定できませんでした。この問題は、当社が所有するどのデバイスでも再現できません。Apple のレビュアーにも苦情はありませんでした。これらの電話では、URL から画像を取得しない XHR も機能しません。顧客の 1 人は 2 台の電話を持っています。カスタム URL スキームはそのうちの 1 つで機能しますが、2 つ目ではまったく機能しません。彼は、それらは同一であり、Safari 拡張機能はインストールされていないと述べています。残念ながら、問題の原因を特定できませんでした。一部の電話ではカスタム URL スキームが機能しない場合があることに注意してください。