我正在使用 WKWebView 构建一个移动应用程序。我注册了自定义 url 方案 image:// 和 thumb:// 以将资产从本机部分提供给应用程序的 Web 部分。
webViewConfiguration.setURLSchemeHandler(handler, forURLScheme: "image")
webViewConfiguration.setURLSchemeHandler(handler, forURLScheme: "thumb")
如果在 HTML 中使用具有自定义方案的 url,则此方法效果很好。例如,<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 吗?
更新
我们从 HTTPS 切换到 HTTP 来制作 XHR 来解决这个问题。
不幸的是,自定义 url 方案似乎不适用于某些 iPhone。我们有 5 个使用 iPhone 的客户,他们既没有切换到 HTTP,也没有发送 Access-Control-Allow-Origin 标头帮助。我们无法确定是哪个设置导致了这个问题——这个问题无法在我们拥有的任何设备上重现。苹果审查员也没有任何抱怨。也不是 XHR,在这些手机上无法通过 url 获取图像。其中一位客户有两部手机。自定义 url 方案适用于其中之一,而它们根本不适用于第二个。他说它们是相同的,并且没有安装 Safari 扩展。不幸的是,我们无法确定导致问题的原因。请注意自定义 url 方案可能不适用于某些手机。