5

我的 chrome 扩展文件夹中有一个页面 iframe.html。我希望它显示在我当前的网页中。这就是问题所在,当我单击 iframe 中的按钮时,如何关闭 iframe?我试过这样的代码:

window.parent.iframe.hide()

但它不适用于错误:

Unsafe JavaScript attempt to access frame with URL

但是我清楚地阅读了evernote的源文件。它有一些代码,如

window.parent.$readable.hide()

为什么evernote的扩展有效,但我的扩展显示一些错误?这是我应该在 manifest.json 中做的事情吗?这是我的清单文件。

{
  "name": "Reader",
  "version": "1.0",
  "manifest_version": 2,
  "description": "A great start!",
  "browser_action": {
    "default_icon": "icon.png"
  },
  "background": {"scripts": ["background.js"]},
  "permissions": [
    "tabs", "<all_urls>"
  ],
  "web_accessible_resources": [
    "iframe/index.html"
  ]
}
4

1 回答 1

0

我没有仔细研究过 Evernote,但有一种可能性:也许 Evernote 正在为其<iframe>添加的内容指定额外的权限属性。看看 MDN 对sandbox属性的描述:

该属性的值可以是解除特定限制的以空格分隔的令牌列表。有效的令牌是:

allow-same-origin:允许将内容视为与包含文档来自同一来源。如果未使用此关键字,则嵌入的内容将被视为来自唯一来源。

...

allow-scripts:允许嵌入式浏览上下文运行脚本(但不创建弹出窗口)。如果不使用该关键字,则不允许该操作。

因此,当您的内容脚本将 iframe 添加到页面时,让它添加一个sandbox属性,以减轻源和/或脚本限制。

<iframe src="chrome-extension://abcdefghijk/iframe/index.html" sandbox="allow-same-origin">

尝试添加不同的sandbox权限,看看是否可以解决它。我相当有信心allow-same-origin和/或allow-scripts将解决这个问题。

于 2012-07-27T05:20:18.377 回答