Safari扩展发送消息到注入的脚本

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

我正在设计一个safari应用程序,并发现我需要能够将数据从全局页面发送到注入的脚本,并在阅读Apple文档后发现我将需要使用消息。

最初,我试着写消息来做我想要的事情而且失败了。然后,我简化了代码,只发送一条基本消息,但也失败了。将它缩小到我认为错误之后,这是我尝试的代码:

Global.html:

<!DOCTYPE html>
<head>
</head>
<body>
<script type="text/javascript" charset="utf-8">
    // Set up the Listener
    safari.application.addEventListener("command", performCommand, false);

    // Function to perform when event is received
    function performCommand(event) {
        // Make sure event comes from the button
        if (event.command == "parseGrades") {
            alert('made it');
            safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("execute", "engage");
        }
    }
</script>
</body>
</html>

Inject.js:

safari.self.addEventListener("message", handleMessage, false);
function handleMessage(msgEvent) {
    alert('message received');
}

当我运行扩展程序时,我收到一条警告,上面写着“成功”,但我从未收到“收到消息”的警报(这是我想要的)。

就扩展设置本身而言,我将网站访问权限设置为all并包含安全页面,并将global.html设置为全局页面,将Inject.js设置为结束脚本。

我也尝试将Inject.js设置为启动脚本,但这与将其设置为结束脚本具有相同的效果,因此我将其更改为结束脚本。

我用以下内容交叉引用:

  1. https://developer.apple.com/library/archive/documentation/Tools/Conceptual/SafariExtensionGuide/MessagesandProxies/MessagesandProxies.html#//apple_ref/doc/uid/TP40009977-CH14-SW1 - 根据这些文档,它应该工作
  2. Safari Extension - Message
  3. Safari extension messaging
  4. https://stackoverflow.com/questions/17500614/safari-extension-accessing-variable(已删除)
  5. 等等…

基于这些来源,在我看来它应该工作,但我显然是错误的:)。

javascript safari safari-extension
1个回答
1
投票

这似乎是因为Safari缓存了页面的扩展脚本,从而阻止了邮件的接收。

这是错误:

undefined is not an object (evaluating 'safari.application.activeBrowserWindow.activeTab.page.dispatchMessage)

它可能意味着safari.application.activeBrowserWindow不存在,因为注入的脚本实际上没有被注入,所以没有什么可以发送消息。

重启Safari似乎可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.