我应该如何将tvOS AppDelegate的applicationWillEnterForeground映射到javascript函数?

问题描述 投票:0回答:1

我正在关注Apple的Playing Media in a Client-Server App示例项目。

func executeRemoteMethod(_ methodName: String, completion: @escaping (Bool) -> Void) {
    appController?.evaluate(inJavaScriptContext: { (context: JSContext) in
        let appObject : JSValue = context.objectForKeyedSubscript("App")

        if appObject.hasProperty(methodName) {
            appObject.invokeMethod(methodName, withArguments: [])
        }
        }, completion: completion)
}

在应用程序生命周期事件期间调用该方法,如下所示:

func applicationWillEnterForeground(_ application: UIApplication) {

    executeRemoteMethod("onWillEnterForeground", completion: { (success: Bool) in
        // ...
    })
}

我想知道它是如何工作的。这是为了使本机iOS代码库能够将生命周期事件传递给Javascript代码吗?当我设置断点时,我看到executeRemoteMethod函数被调用。但我认为它实际上并没有做任何事情。如何将其映射到js函数?我是否必须创建一个新的js文件或只是在我的application.js文件中创建一个新函数?

javascript swift tvos apple-tv tvml
1个回答
0
投票

感谢阅读这个tutorial。我学会了:

在块开始时,我们首先获得对JavaScript“App”对象的引用。然后,我们使用传递给我们的方法名称测试属性的存在。如果存在,我们调用该方法。虽然当前的实现没有将参数传递给方法,但是如果需要的话我们也可以修改它。最后,传递给我们的完成块在完成JavaScript方法的执行时执行。类似于函数已经在application.js中编写的:

在其教程中,application.js看起来像这样:

App.onLaunch = function(options) {
    var alert = createAlert("Hello World!", "Welcome to tvOS");
    navigationDocument.pushDocument(alert);
}

App.onWillResignActive = function() {
}

App.onDidEnterBackground = function() {
}

App.onWillEnterForeground = function() {
}

App.onDidBecomeActive = function() {
}

App.onWillTerminate = function() {
}

var createAlert = function(title, description) {
    var alertString = `<?xml version="1.0" encoding="UTF-8" ?>
        <document>
          <alertTemplate>
            <title>${title}</title>
            <description>${description}</description>
          </alertTemplate>
        </document>`

    var parser = new DOMParser();

    var alertDoc = parser.parseFromString(alertString, "application/xml");

    return alertDoc
}

因此,我只需要在application.js中添加以下内容,然后它将被调用AppDelegates的WillEnterForeGround回调。

App.onWillEnterForeground = function(options) {
    console.log("something")
}
© www.soinside.com 2019 - 2024. All rights reserved.