【问题标题】:How should I map tvOS AppDelegate's applicationWillEnterForeground to a javascript function?我应该如何将 tvOS AppDelegate 的 applicationWillEnterForeground 映射到 javascript 函数?
【发布时间】:2019-03-14 19:58:22
【问题描述】:

我正在关注 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】:

    感谢阅读此tutorial。我学会了:

    在块的开头,我们首先得到一个对我们的引用 JavaScript “应用”对象。然后,我们测试一个属性的存在 使用传递给我们的方法名称。如果存在,我们 调用方法。虽然目前的实施 不向方法传递参数,我们可以将其修改为 如果需要的话。最后,传递给我们的完成块是 当 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")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多