我正在尝试为Google Hangouts中的自动拨号编写Chrome扩展程序,因此我不必为每次会议输入我的会议桥接号码。将它们保存起来会很高兴......无论如何,我的概念类似于工作,但我试图解决跨源问题。
当您在Google环聊中拨打电话时,请从联系页面开始,然后输入您要拨打的号码。当您按Enter键或单击"拨打电话"时,拨号器将加载到iFrame中。在我的Chrome扩展程序中,我可以获得对iFrame的引用,但框架位于域" plus.google.com",我的脚本正在访问" hangouts.google.com& #34;
我知道他们都在google.com父域名下,因此我尝试允许我的Chrome扩展程序访问框架,以便在框架内的拨号器按钮上执行.click()。 s contentWindow。
在Chrome扩展程序的内容脚本中,我从父页面中选择iframe元素并设置为名为iframe的变量。
var iframe = $("div iframe")[0];
我可以设置
document.domain = "google.com";
没有问题,但是当我尝试
时iframe.contentWindow.document.domain = "google.com";
我得到了
content.js:3 Uncaught SecurityError: Blocked a frame with origin
"https://hangouts.google.com" from accessing a frame with origin
"https://plus.google.com". The frame requesting access set "document.domain" to
"google.com", but the frame being accessed did not. Both must set
"document.domain" to the same value to allow access.
我已尝试放宽扩展程序中的内容安全政策,但也许我做得不对:
"content_security_policy": "script-src 'self' https://google.com; object-src 'self'",
"permissions": [
"http://*/",
"tabs"
]
有没有办法解决这个问题?
答案 0 :(得分:0)
在这种情况下,添加权限或放宽CSP将无济于事。
您需要在iframe中使用内容脚本的第二个实例来操作其跨域文档。
确保使用"all_frames": true
注入内容脚本。
您可以使用iframe.contentWindow.postMessage
在内容脚本之间进行通信。