1

我正在为 safari 开发扩展。我已经检查过我们可以在主机应用程序和扩展程序之间进行通信,因为我们可以运行扩展程序或关闭扩展程序。但就我而言,我想在不关闭扩展程序应用程序的情况下与主机应用程序通信。

var MyExtensionJavaScriptClass = function() {};
MyExtensionJavaScriptClass.prototype = {
run: function(arguments) {
    arguments.completionFunction({"baseURI": document.documentElement.innerHTML});
 },

test: function(arguments) {

    alert("Need to run without closing extension");

},
finalize: function(arguments) {

    alert("Test Done");
    // arguments contains the value the extension provides in [NSExtensionContext completeRequestReturningItems:expirationHandler:completion:].
    // In this example, the extension provides a color as a returning item.
    document.body.style.backgroundColor = arguments["bgColor"];

}
};
var ExtensionPreprocessingJS = new MyExtensionJavaScriptClass;

在我的 JavaScript 文件上方,我运行了在扩展运行时运行的函数,并在我们在 objc 端调用 completeRequestReturningItems 时完成有趣的运行。我想在不关闭扩展的情况下运行我的测试函数

4

2 回答 2

4

你没有。

引用Apple 的扩展指南,来自扩展如何通信部分。

正在运行的扩展程序与其包含的应用程序之间没有直接通信;通常,包含的应用程序在其扩展程序运行时甚至都没有运行。

这并不是说你不能,只是 Apple 不想要你,而且这样做的能力可能是私人的或不存在的。

于 2014-06-22T23:21:42.133 回答
1

快速术语级别集:

包含应用程序=“包含一个或多个扩展程序的应用程序称为包含应用程序”主机应用程序=“可以让用户选择扩展程序以帮助他们执行任务的应用程序称为主机应用程序。”

话虽如此,Apple 并未提供从 Host App 到扩展的通信流。在您的情况下,您可以最初使用 JS 预处理文件中的 run() 加载数据,然后使用 finalize() 在扩展退出时响应数据。

于 2014-07-29T15:29:42.997 回答