使用Chrome扩展程序修改具有本地来源的iframe元素

时间:2015-06-25 04:57:04

标签: jquery google-chrome iframe google-chrome-extension

我现在正在Chrome扩展,但我遇到了许可/安全问题。我有一个本地HTML模板文件,我在某些网页上插入浮动iframe。我从AJAX / cookies中检索到某些信息,我想将其插入到模板中。当我这样做时,我遇到了一个错误:

一些相关代码:

$(this).after('<div id=\"flowframe\"><iframe src=\"'+chrome.extension.getURL('hoverwindow.html')+'\"></iframe></div>');
$('iframe').contents().find('#description').html(data.description);

第二行抛出错误:

Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFrameElement' 
Blocked a frame with origin "http://ugradcalendar.uwaterloo.ca" from accessing a frame with origin "chrome-extension://kdjcjbijngfephllebpnahpodnbcnhlo".  
The frame requesting access has a protocol of "http", the frame being accessed has a protocol of "chrome-extension". Protocols must match.

我认为我的清单设置正确,但我不完全确定:

...
"web_accessible_resources": ["loading.gif", "hoverwindow.html"],
"content_scripts": [
{
  "matches": ["http://ugradcalendar.uwaterloo.ca/*"],
  "css": ["extension-styling.css"],
  "js": ["jquery-1.11.3.js","js.cookie.js","script.js"],
  "all_frames": true
}
],
"permissions": [
  "activeTab",
  "cookies",
  "http://uwflow.com/",
  "https://uwflow.com/",
  "http://ugradcalendar.uwaterloo.ca/",
  "https://ugradcalendar.uwaterloo.ca/"
]

1 个答案:

答案 0 :(得分:1)

所以,几天后我发现了一个适合我的解决方案。我没有为iframe取得任何成功。

由于我的模板是本地文件,因此我了解到我可以简单$.load()将模板放入绝对位置div并避免让自己感到头疼postMessage错误和其他{{1}怪癖。

供参考,如果有人在iframe尝试使用本地html时遇到类似问题,我的方式是这样做的:

iframe

然后,我可以直接修改同一域上$('body').after('<div id=\"flowframe\"></div>'); $('#flowframe').load(chrome.extension.getURL("hoverwindow.html")); 的元素而不会出现问题。