2016-10-07 68 views
-1

我試圖重現從這個項目的結果:https://github.com/victorchee/JavaScriptCoreDemo從JavaScript調用本地斯威夫特功能在WebView中

也就是說我要再現第二個按鈕它調用從斯威夫特本機的功能。

是我遇到的問題是下面的代碼:

jsContext = webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as? JSContext

我得到的休耕錯誤:

2016-10-07 18:39:01.664 JSCore-Test-01[17603:689101] *** WebKit discarded an uncaught exception in the webView:didFinishLoadForFrame: delegate: <NSUnknownKeyException> [<WebView 0x6080001208c0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key documentView.

什麼是Mac OS X中的等價的iOS碼?

回答

0

Small research在macOS的WebView API中顯示所有這些都是public API。爲了獲取上下文,只是訪問

webView.mainFrame.globalContext 

對於基於C-API JSGlobalContextRef對象,或

webView.mainFrame.javaScriptContext 

對於基於JSContext* Objective-C的。

+0

我花了幾個小時研究這個,並試圖解決它!使用'webView.mainFrame.javaScriptContext'確實會消除錯誤,但它不會像'documentView.webView.mainFrame.javaScriptContext'爲iOS應用程序那樣加載'JSContext *'。這裏是我的Mac OS X仍然使用'documentView'作爲例外的說明https://github.com/moon47usaco/JSCore-Test-03/tree/master – Moon47

+0

而不是訪問主框架上下文,嘗試使用這個委託方法:https://developer.apple.com/reference/webkit/webframeloaddelegate/1501462-webview –

+0

允許'jsContext = webView.valueForKeyPath(「documentView.webView.mainFrame.javaScriptContext」)as? JSContext'沒有例外,但仍然沒有按鈕交互。試着用'context.objectForKeyedSubscript(「show」)?. callWithArguments([「Swift call」])''沒有賦值到'jsContext',但是按鈕仍然沒有任何作用。爲什麼這在OS X中更加困難?謝謝你的建議。 – Moon47