Javascript 从JSContext块创建UIWebView可防止在iOS8上加载资产

Javascript 从JSContext块创建UIWebView可防止在iOS8上加载资产,javascript,ios,uiwebview,javascriptcore,Javascript,Ios,Uiwebview,Javascriptcore,我正在尝试从JSContext块创建webview。但是,它会导致新的webview加载一个没有其资产(css/js)的网页,我认为这可能是由于块的JSContext和webview的context之间存在冲突 在块中的之后添加dispatch\u——这会延迟webview的初始化,可能会消除JS上下文——效果非常好 let block: @objc_block (NSString!) -> Void = { (string : NSString!) -> Void in

我正在尝试从JSContext块创建webview。但是,它会导致新的webview加载一个没有其资产(css/js)的网页,我认为这可能是由于块的JSContext和webview的context之间存在冲突

在块中的之后添加
dispatch\u——这会延迟webview的初始化,可能会消除JS上下文——效果非常好

let block: @objc_block (NSString!) -> Void = {
    (string : NSString!) -> Void in

    // This will produce a webview with the CSS that is not loading.
    // A solution is to dispatch_after the following code so it's executed outside of the JS callback.
    self.webview = UIWebView()
    self.webview.frame = self.view.frame
    self.view.addSubview(self.webview)
    self.webview.loadRequest(NSURLRequest(URL: NSURL(string: "https://google.com")!))

    /*
    // Working hack
    dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue(), { () -> Void in
        self.webview = UIWebView()
        self.webview.frame = self.view.frame
        self.view.addSubview(self.webview)
        self.webview.loadRequest(NSURLRequest(URL: NSURL(string: "https://google.com")!))
    })
    */
}

let context = JSContext()
context.setObject(unsafeBitCast(block, AnyObject.self), forKeyedSubscript: "test")

context.evaluateScript("test()")
此处的示例项目:

那里发生了什么事? 有没有一种方法可以让它在没有
dispatch\u的情况下在
hack之后工作