UoS*_*UoS 5 iframe xcode ios swift wkwebview
我在用 swift 编写的 iOS 应用程序中创建了一个本地 HTML 文件。HTML 文件被加载到 WKWebView 中,如下所示:
let url = Bundle(identifier: myIdentifier).url(forResource: "localHtmlFile", withExtension: "html")
let htmlFormatString = try String(contentsOf: url)
loadHTMLString(string: htmlFormatString, baseURL: nil)
Run Code Online (Sandbox Code Playgroud)
HTML 页面包含一个 iframe,我希望它加载一个外部页面:
<div>Test</div>
<iframe src="https://www.somepage.com"></iframe>
Run Code Online (Sandbox Code Playgroud)
本地HTML文件加载成功,可以看到Testdiv中的文字。iframe 也已创建,但为空。如果我使用 Safari Developer Tools 进行调试,则只有一个空的 html 页面,但没有加载任何内容。此外,根本不执行对 url 的网络请求。
但是如果我插入一个带有 的外部 JavaScript 文件<script src="https://url-to-some-js">,则 JS 代码将成功加载,因此没有网络问题。另外,如果我直接用 加载 url webView.load(URLRequest(url: url)),它工作正常。仅在 iframe 内,它不起作用。
如何为在 iOS WKWebView 中工作的外部资源制作 iframe?这完全被iOS阻止了还是我必须配置其他东西?
基于一些谷歌搜索,看起来您需要使用 webView 的委托方法来允许外部站点。具体来说,webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)使用以下推荐的实现方式来实现:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let requestURL = navigationAction.request.url?.absoluteString else { return }
if requestURL.contains("somepage.com") {
decisionHandler(.allow)
}
else {
// You don't need to cancel here, but you can implement your own logic here
decisionHandler(.cancel)
}
}
Run Code Online (Sandbox Code Playgroud)
在桌面浏览器上执行此操作(其中有本地 HTML 文件和远程 iFrame)会导致一些安全问题,因此我希望您在这里遇到同样的问题。
您可以将本地内容移动到远程服务器吗?它不必与您的 iframe 内容相同,尽管这会让您的生活更轻松。
如果您有大量本地数据,那么您可以向包含本地数据的 JSON 对象的父页面发送 POST 请求。
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |