2017-12-28 7 views
0

os/xに新しい光沢のあるWKWebViewとサンドボックスを使用すると、ファイルを読み込むための後続の呼び出しとして介入リセットが必要です。これはWKWebView loadFileURL works only once上の以前の質問に多少関連している - 、なしファイルのURLロードされ得る - ここでは、OS/XIに、そこ IOS私は第二引数としてloadURL.deletingLastPathComponent()を渡すためにしようとしましたが、その後、すべてのブレークはサンドボックス&WKWebView loadFileURL(_、permittedReadAccessTo :)不一致

if loadURL.isFileURL { 
    webView.loadFileURL(loadURL, allowingReadAccessTo: loadURL) 
} 
else 
{ 
    webView.load(URLRequest(url: loadURL)) 
} 

を行いますユーザーのホームパス、またはルート全体を使用しないでください。'file:///'また、絶対的なファイルパスである '一時的な'例外もありません。最後に、介在するtopLoading()を試行しても効果はありません。

次のファイルURLをロードする唯一の解決策(yuck)は、まずファイル以外のURLをロードすることです!

これは意図しない結果をもたらすサンドボックス環境のようですか?

答えて

0

ファイルURLが以前にロードされたときにWebViewを再利用できないので、これはうまくいく - webViewサブクラス機能です。この回避策は、古いウィンドウを維持したい場合(newWindowsフラグがtrueの場合)に、古いウィンドウを保持する新しいウィンドウ/ docをインスタンス化します(newWindowsフラグはtrueです):

func loadNext(url: URL) { 
    let doc = self.window?.windowController?.document as! Document 
    let newWindows = UserSettings.createNewWindows.value 
    var fileURL = url 

    if !url.isFileURL { 
     if newWindows { 
      do 
      { 
       let next = try NSDocumentController.shared().openUntitledDocumentAndDisplay(true) as! Document 
       let oldWindow = self.window 
       let newWindow = next.windowControllers.first?.window 
       (newWindow?.contentView?.subviews.first as! MyWebView).load(URLRequest(url: url)) 
       newWindow?.offsetFromWindow(oldWindow!) 
      } 
      catch let error { 
       NSApp.presentError(error) 
       Swift.print("Yoink, unable to create new url doc for (\(url))") 
       return 
      } 
     } 
     else 
     { 
      self.load(URLRequest(url: url)) 
     } 
    } 

    if let origURL = (fileURL as NSURL).resolvedFinderAlias() { 
     fileURL = origURL 
    } 

    if appDelegate.isSandboxed() && !appDelegate.storeBookmark(url: fileURL) { 
     Swift.print("Yoink, unable to sandbox \(fileURL))") 
     return 
    } 

    if !(self.url?.isFileURL)! && !newWindows { 
     self.loadFileURL(fileURL, allowingReadAccessTo: fileURL) 
     doc.update(to: fileURL, ofType: fileURL.pathExtension) 
     return 
    } 

    // We need or want a new window; if need, remove the old afterward 
    do { 
     let next = try NSDocumentController.shared().openUntitledDocumentAndDisplay(true) as! Document 
     let oldWindow = doc.windowControllers.first?.window 
     let newWindow = next.windowControllers.first?.window 
     (newWindow?.contentView?.subviews.first as! MyWebView).loadFileURL(fileURL, allowingReadAccessTo: fileURL) 
     if newWindows { 
      newWindow?.offsetFromWindow(oldWindow!) 
     } 
     else 
     { 
      newWindow?.overlayWindow(oldWindow!) 
      oldWindow?.orderOut(self) 
     } 
     next.update(to: fileURL, ofType: fileURL.pathExtension) 
    } 
    catch let error 
    { 
     NSApp.presentError(error) 
     Swift.print("Yoink, unable to new doc (\(fileURL))") 
    } 
}