gpt4 book ai didi

javascript - 为什么不能在 Opera 12 中在后台脚本和注入(inject)脚本之间发布消息?

转载 作者:行者123 更新时间:2023-11-29 22:22:42 34 4
gpt4 key购买 nike

由于注入(inject)脚本无法执行跨域 xmlhttp 请求,我尝试过,因为手册中建议将消息​​从注入(inject)脚本发送到后台脚本以完成这项工作。但我无法让消息正常工作。

这是我的代码,它只有三个文件,尽可能简单的扩展。

config.xml

<?xml version="1.0" encoding="utf-8"?>
<widget xmlns="http://www.w3.org/ns/widgets" id="http://www.example.org/helloworld">
<name>postMessage-testcase</name>
<description>check if opera's postMessage fails</description>
</widget>

index.html

<!doctype html>
<html lang="en">
<head>
<script>
opera.extension.onmessage = function(event) {
alert("get the message!");
opera.extension.postMessage("posting reply");
};
</script>
</head>
<body></body>
</html>

includes/user.js

// ==UserScript==
// @include *apod.nasa.gov*
// ==/UserScript==

opera.extension.onmessage = function(event) {
alert("got reply !");
};

alert("yep, I'm on apod, proceeding with messages");
opera.extension.postMessage("message body");

脚本应该在用户打开 apod.nasa.gov 时来回发送消息,但这里只发送一条消息,没有消息发生,控制台中也没有错误显示。

最佳答案

不能从后台进程调用 opera.extension.postMessage() 方法,因为它不知道要将消息发布到哪个页面/标签。相反,opera.extension.broadcastMessage() 可用于向所有选项卡发送消息(参见:http://dev.opera.com/articles/view/extensions-api-messaging-broadcastmessage/)

或者,向特定选项卡中的注入(inject)脚本发送消息:

  1. 在后台进程中监听连接事件(opera.extension.onconnect)
  2. 从事件的 source 对象运行 postMessage()

参见:http://dev.opera.com/articles/view/opera-extensions-messaging/#backgroundscript_injectedscript

对了,不要忘记你在后台进程中使用跨域XHR,你需要在你的config.xml文件中允许访问目标域,例如:

<access origin="http://apod.nasa.gov" subdomains="true"/>

关于javascript - 为什么不能在 Opera 12 中在后台脚本和注入(inject)脚本之间发布消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11456040/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com