首页 > 解决方案 > 针对 iframe 的内容脚本不会在特定网站上触发

问题描述

背景

我正在创建一个扩展,它应该在每一帧中执行内容脚本。扩展由两个文件组成:

清单.json

{
  "manifest_version": 2,
  "name": "Test",
  "version": "1.0",
  "permissions": ["<all_urls>"],

  "content_scripts": [{
    "matches": ["<all_urls>"],
    "js": ["content.js"],
    "all_frames": true,
    "match_about_blank": true,
    "run_at": "document_start"
  }]
}

内容.js

console.log('content script loaded')

简而言之,每次框架开始加载其contentDocument时,都会加载内容脚本,然后记录一条消息。另外,如果您手动插入一个空白框,如下所示,内容脚本也会被触发。

var frame = document.createElement('iframe')
document.body.appendChild(frame)

问题

我已经在几个网站上对其进行了测试,例如https://www.google.com,一切都按预期工作。但是,我发现如果我通过上面提到的方法在https://www.twitch.tv上手动插入空白帧,由于某种原因不会触发内容脚本。似乎来自网站的脚本能够拦截操作并以独特的方式将框架附加到 DOM 而不会触发我的内容脚本。

我试图跟踪代码,但仍然不知道普通脚本如何做到这一点。任何人都可以帮忙吗?

我的平台

标签: javascriptgoogle-chrome-extensioncontent-script

解决方案


推荐阅读