Safari浏览器插件 - 消息(Safari Extension - Message)

2019-09-21 07:36发布

这是我的第一个Safari浏览器扩展,迄今为止我喜欢安静一点。 我想补充一点,与injected.js页面交互,并经由jQuery的.toggle页面切换项目()的伸缩杆;

我已经能够将jQuery加载到页面没有任何问题,但是当它涉及到从长杆发送消息给我,没有达到injected.js。 我已经超过8小时花在今天回顾苹果的开发者页面。 我设法做的唯一的事情就是

接杆:

<!DOCTYPE html>
<html>
<head>
    <title>Board Tools</title> <!-- Extension Bar -->
    <script type="text/javascript" src="jQuery.min.js"></script>
    <script type="text/javascript">
        const myGlobal = safari.extension.globalPage.contentWindow;

    function ToggleBoard(){ 
        myGlobal.test();    
    }
</script>

</head>
<body>

    <input type="button" id="board" value="Board Toggle" onClick="ToggleBoard();">

</body>
</html>

全球HTML:

<!DOCTYPE HTML>
<html>
<head>
    <title>global page</title>
    <script type="text/javascript">

        function test() {
            alert("1");
            event.target.page.dispatchMessage("test", "test");
            alert("2");
    }

   </script>
</head>
<body> </body>
</html>

Injected.js:

function test(msgEvent) {
    alert(msgEvent.name);
}
// register for message events
safari.self.addEventListener("message", test, false);

我能够从分机电话拨打栏ToggleBoard()函数。 该ToggleBoard()函数可以调用从全球HTML测试()函数。 当测试()函数被调用全球HTML页面上的拳头警报触发时,第二个没有。 至少远我已经把范围缩小。 我得到我想要把我的信息的方式可能是错的,但这是在这里说: https://developer.apple.com/library/archive/documentation/Tools/Conceptual/SafariExtensionGuide/MessagesandProxies/MessagesandProxies.html #// apple_ref / DOC / UID / TP40009977-CH14-SW1

只是为了看看它是否是我的一部分或愚蠢的东西与我抄他们的网页上的确切代码的开发页面错误,只是使用Global HTML和Injected.js,我仍然没有得到我一直在寻找的结果。

解决:我选择的答案确实对我有问题,申请了很多。 这不是确切的答案每说,但它确实,随着意见帮我把我的代码理顺。 为了获得各种扩展组件消息正确,我需要设置为所有扩展远程访问,然后添加URL模式到白名单中。 我只扩展上触发我想要的网页,我可以使用的消息。

Answer 1:

在您的test在全球翻页功能, event并非指什么,因为功能不是一个事件处理程序。 如果您要定位的活动选项卡,用这个来代替:

safari.application.activeBrowserWindow.activeTab.page.dispatchMessage('test, 'test');

如果,以后,你找到你想要的长杆或全局页面从注入脚本的消息作出回应,你可以在任何地方像这样添加的东西:

safari.application.addEventListener('message', function (e) {
    if (e.name === 'whatever') {
        e.target.page.dispatchMessage('foo', 'bar');
    }
}, false);

如果你想从一个注入脚本发送消息给全球网页或伸缩杆,使用safari.self.tab.dispatchMessage并已经制定了“信息”事件处理程序,在全球网页或伸缩杆。



文章来源: Safari Extension - Message