我收到以下错误:
[错误]错误 - 错误:未捕获(在承诺中):SecurityError(DOM异常18):阻止尝试使用history.replaceState()从file:/// Users // Library / Developer /更改会话历史记录URL CoreSimulator / Devices // data / Containers / Bundle / Application // ios-shell.app / public / index.html to file:/// Users // Library / Developer / CoreSimulator / Devices // data / Containers / Bundle / Application //ios-shell.app/public/#/。路径和片段必须与沙盒文档匹配。
两个网址之间的差异只是结束public/index.html
- > public/#/
有一个similar question asked here on StackOverflow但这是file:///
和file://
之间的问题
这是一个自定义iOS应用程序,用于运行没有cordova的HTML SPA应用程序。目前使用WKWebView
Web应用程序是使用{hash: true}
作为路由策略的Angular 5应用程序。
的ViewController
class ViewController: UIViewController {
var serenity: Serenity?
override func viewDidLoad() {
super.viewDidLoad()
serenity = Serenity(self)
serenity?.load("index")
}
...
}
Serenity.swift
class Serenity: WKWebView, WKScriptMessageHandler{
var controller: ViewController?
let config = WKWebViewConfiguration()
var commands = Dictionary<String, (_ args: Any?) -> Any?>()
init(_ controller: ViewController){
self.controller = controller
config.userContentController.addUserScript(WKUserScript(source: "window.NATIVE_DEVICE=true;", injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false))
super.init(frame: controller.view.frame, configuration: config)
}
func load(_ file: String) {
if let html = Bundle.main.path(forResource: file, ofType: "html", inDirectory: "public"){
let url = URL(fileURLWithPath: html)
let request = URLRequest(url: url)
super.load(request)
controller?.view.addSubview(self)
}
}
...
}
问题
有没有办法将index.html
文件加载为public/
,这样当角度接管并开始路由时,它不会导致此错误?
任何其他建议也会有所帮助
答案 0 :(得分:2)
我修改了我的index.html文件,使其基数为<base href="index.html">
而不是<base href=".">
,强制角度使用.../index.html/#/
而不是.../#/
等路线。
我尝试加载目录并允许WKWebView
默认加载index.html页面
if let html = Bundle.main.path(forResource: file, ofType: "html", inDirectory: "public"){
let url = URL(fileURLWithPath: html)
let request = URLRequest(url: url).deletingLastPathComponent()
super.load(request)
controller?.view.addSubview(self)
}
然而,这导致WKWebView
根本没有加载页面。