WKWebView 不加载第二个 CSS
Posted
技术标签:
【中文标题】WKWebView 不加载第二个 CSS【英文标题】:WKWebView not loading second CSS 【发布时间】:2018-09-13 18:23:43 【问题描述】:我正在使用 WKWebView
加载本地 html。 HTML 文件正在从同一位置加载 main.css
文件。 CSS 有效。
如果我点击一个链接,从假设dir/another.html
加载另一个 HTML 文件,该文件正在加载带有 ../main.css
的 CSS 链接甚至不会打开。
当我从 dir/another.html
中删除 CSS 链接时,HTML 将加载。
有人可以帮我解决这个问题吗? o.O
视图控制器
override func viewDidLoad()
content.isOpaque = false
content.uiDelegate = self
content.navigationDelegate = self
let url = Bundle.main.url(forResource: result?.id, withExtension: "html", subdirectory: "location".localized)!
// result?.id is pointing to index.html at "location".localized
let request = URLRequest(url: url)
content.loadFileURL(url, allowingReadAccessTo: url)
content.load(request)
super.viewDidLoad()
第一个 HTML index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="user-scalable=no, initial-scale=1" />
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="anything">
<a href="dir/another.html">Link</a>
</div>
...
第二个 HTML dir/another.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="user-scalable=no, initial-scale=1" />
<link rel="stylesheet" type="text/css" href="../style.css">
</head>
<body>
<div class="anything">
<a href="dir/another.html">Link</a>
</div>
...
按需提供更多信息 :)
【问题讨论】:
您遇到了什么错误?我的意思是在控制台(F12)。如果有的话 对不起@kademat,什么样的控制台? Xcode 输出? @TomášPánik 我的意思是点击链接后来自谷歌浏览器的控制台:ExampleConsole 点击链接后控制台中没有输出也是有用的信息:)content.loadFileURL(url, allowingReadAccessTo: url)
您正在限制对url
的访问,但这不是其他页面所在的位置。看起来就这么简单。
您可以在开发菜单中将 Safari 连接到您的模拟器 WKWebView(您可能需要在 Safari 的首选项 -> 高级中启用此菜单)
【参考方案1】:
你是说:
content.loadFileURL(url, allowingReadAccessTo: url)
因此,您正在限制对 this 目录(由url
表示的目录)的访问。当您尝试访问 不同 目录中的资源时,您会被完全阻止。
【讨论】:
我理解您之前对此的评论,您是对的 :) 马特,有没有简单的解决方案可以使用此方法并允许读取访问到 HTML 根目录,包括那里的所有内容? 使用Bundle.main
本身的URL?
具体怎么做?对不起,noobish 问题以上是关于WKWebView 不加载第二个 CSS的主要内容,如果未能解决你的问题,请参考以下文章
如果第一个 URL 不存在于 android webView 中,则加载第二个 URL
setUserVisibleHint的使用.执行顺序和viewPager.setOffscreenPageLimit不管用还是默认会加载第二个fragment