Javascript 在弹出窗口中从iframe向后台脚本发送消息

Javascript 在弹出窗口中从iframe向后台脚本发送消息,javascript,jquery,iframe,google-chrome-extension,Javascript,Jquery,Iframe,Google Chrome Extension,我有一个google chrome扩展,它有一个包含和iframe的弹出窗口。iframe指向一个域abc.com。是否有任何方法可以单击iframe并向我的chrome扩展的后台脚本发送消息。我尝试将以下javascript代码添加到abc.com上的index.php页面 <script src="http://code.jquery.com/jquery-1.11.1.min.js" type="text/javascript" charset="utf-8"></s

我有一个google chrome扩展,它有一个包含和iframe的弹出窗口。iframe指向一个域abc.com。是否有任何方法可以单击iframe并向我的chrome扩展的后台脚本发送消息。我尝试将以下javascript代码添加到abc.com上的index.php页面

<script src="http://code.jquery.com/jquery-1.11.1.min.js" type="text/javascript"   charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
    $(document).ready(function(){
        $("#mybtn").click(function(){
            chrome.extension.sendMessage({ action: "new message" });
        });
    });
</script>

但它不起作用,也许我错过了什么。请提供帮助。

iframe
中,您不再处于扩展页上下文中。因此,扩展API不会暴露于运行在
abc.com
上的脚本

然而,由于它是一个扩展和一个你们都控制的域,你们可以在它们之间建立

步骤1:

步骤2:在扩展的清单中声明希望
abc.com
能够与您交谈:

"externally_connectable": {
  "matches": ["*://*.abc.com/*"]
}
步骤3:在
abc.com
上,如果安装了扩展,则将显示
chrome.runtime.sendmages

// on the website
if(chrome && chrome.runtime && chrome.runtime.sendMessage){
  /* At least one extension is ready to listen */
} else {
  /* Not Chrome, or extension is not installed */
}
步骤4:使用第一步中的ID发送消息:

var extensionId = "abcdefghijklmnoabcdefhijklmnoabc";
chrome.runtime.sendMessage(extensionId, { action: "new message" });
步骤5:在后台页面中,接收消息:

chrome.runtime.onMessageExternal.addListener(
  function(request,sender,sendResponse) {
    if(request.action=="new message"){
      alert ("Message Recieved");
    }
  }
);


另外,请注意,
chrome.extension.sendMessage
和friends不赞成使用
chrome.runtime.sendMessage

,我可以使用相同的方法将消息发送回iframe??基本上,我想在指向abc.com的iframe和我的扩展背景scriptNo之间建立双向通信;页面必须启动连接。如果需要发送对消息的响应,可以使用
sendResponse
;如果需要完全双向通信,iframe应该使用
chrome.runtime.connect
打开一个端口。请参阅我链接的消息文档。请注意,如果弹出窗口关闭,iframe将被破坏,连接将被切断。如果需要一个长寿命的连接,可以考虑在后台页面中使用IFRAME,或者更好地使用WebSoCube。
chrome.runtime.onMessageExternal.addListener(
  function(request,sender,sendResponse) {
    if(request.action=="new message"){
      alert ("Message Recieved");
    }
  }
);