访问Mac App JSContext中的文件系统



我正在开发一款Mac应用程序,该应用程序使用JSContext来实现某些功能。

它使用这样的调用(其中ctxJSContext(:

let result: JSValue? = ctx.evaluateScript("someFunction")?.call(withArguments: [someArg1!, someArg2])

someFunction脚本中,我们需要解析一个目录并确定它是否存在于文件系统中。据我所知,苹果的JavaScriptCore API没有文件系统访问权限。

有没有什么方法可以让我在swift中有这样的功能:

public static func isAppDirectory(_ path: String) -> Bool {
var isDirectory = ObjCBool(true)
let exists = FileManager.default.fileExists(atPath: path, isDirectory: &isDirectory)
return exists && isDirectory.boolValue
}

并将一些自定义函数指针传递到JSContext中以调用该函数?

您可以为WKWebView设置一个消息处理程序。然后,您可以在web视图和应用程序之间传递数据。用Objective-C回答,但很容易适应。(我认为您也应该能够在JavaScriptCore中设置消息处理程序,但我不熟悉它。(

// Set this while configuring WKWebView.
// For this example, we'll use self as the message handler, 
// meaning the class that originally sets up the view
[webView.configuration.userContentController addScriptMessageHandler:self name:@"testPath"];

您现在可以从JavaScript向应用程序发送字符串:

function testPath(path) {
window.webkit.messageHandlers.testPath.postMessage(path);
}

Objective-C中的消息处理程序:

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *) message{
// .name is the handler's name, 
// .body is the message itself, in this case the path
if ([message.name isEqualToString:@"testPath"]) {
...
[webView evaluateJavaScript:@"doSomething()"];
}
}

请注意,webkit消息是异步的,因此您需要实现某种结构,以便以后继续运行JS代码。

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新