Chrome 扩展程序搞砸了 iframe

Posted

技术标签:

【中文标题】Chrome 扩展程序搞砸了 iframe【英文标题】:Chrome extension messes up iframes 【发布时间】:2014-06-20 05:40:43 【问题描述】:

这很奇怪,但是 chrome 扩展正在加载 iframe 中的内容文件。我在内容脚本匹配中有一个<all_urls>,我将其切换为"http://*/*", "https://*/*"。这很奇怪,因为它仍在 iframes 内加载页面,甚至认为 iframe's src 不适合该匹配项。

我找到了一个脚本来检测对象是否已加载到 iframe 中,现在内容脚本不会影响 google adchoices 或其他广告,但值得注意的是,当我的扩展程序打开时 jsfiddle 不起作用。

我宁愿不发布代码,所以请告诉我我需要发布什么代码。

似乎只有当内容脚本有一些无效代码并且根本不起作用时才会起作用。

所有扩展都这样做吗?我将如何解决它?什么代码可能会这样做?

非常感谢您。

清单:


  "name": "NA",
  "version": "1.0.9",
  "manifest_version": 2,
  "description": "NA",
  "browser_action":
    "default_icon": 
      "19": "img/icon19.png",
      "38": "img/icon38.png"
    ,
    "default_popup":"popup.html"
  ,
  "permissions": [
    "storage",
    "tabs",
    "contextMenus"
  ],
  "background":
    "scripts":["background.js"]
  ,
  "icons": 
    "16": "img/icon16.png",
    "48": "img/icon48.png",
    "128": "img/icon128.png"
  ,
  "content_scripts": [
    
      "matches": ["http://*/*", "https://*/*"],
      "js": ["scripts/jquery-for-content-only.js","scripts/content.js"],
      "run_at": "document_end",
      "all_frames": true
    
  ]

【问题讨论】:

理想情况下,您应该发布清单或清单的净化版本,以及相关的 HTML。否则,您只是要求人们必须猜测,这意味着您将得到错误的答案,或者人们只会转移到他们可以更轻松地提供帮助的领域。我会把代码放进去,因为这就是这个网站的目的。希望这会有所帮助。 点了,我添加了内容和清单 【参考方案1】:

Chrome 扩展清单文件确定内容脚本的运行方式和位置,不仅在 URL 模式匹配方面,而且在它们是否适用于父页面下方的框架方面:

来自Google's "Content Scripts" documentation:

名称:all_frames

类型:布尔值

说明:

可选。控制内容脚本是在匹配页面的所有框架中运行,还是仅在顶部框架中运行。

默认为false,表示只匹配顶框。

由于您将此属性设置为 true,因此您的脚本在 iframe 中运行。将此属性设置为 false 或将其删除,然后脚本应仅在父页面中运行。

【讨论】:

以上是关于Chrome 扩展程序搞砸了 iframe的主要内容,如果未能解决你的问题,请参考以下文章

从 Chrome 内容脚本扩展访问 iframe

允许 Youtube iframe 显示与 Youtube.com 兼容的 Chrome 扩展程序

在 iFrame 中激活 Zurb Foundation 的 Joyride,来自 Chrome 扩展内容脚本

通过 Chrome 扩展程序避免跨域策略

使用 JavaScript 将 Chrome 扩展注入 iFrame

无法从 Chrome 扩展生成的 iframe 更改元素