Javascript 使用Chrome扩展名更改iFrame中的文本

Javascript 使用Chrome扩展名更改iFrame中的文本,javascript,jquery,google-chrome-extension,Javascript,Jquery,Google Chrome Extension,我已经做了一个很棒的chrome扩展,它可以编辑我不喜欢的单词…除了我无法在iframes中使用它…我的清单中已经有了: "matches": ["<all_urls>"], "all_frames": true, "run_at" : "document_idle", "js": ["jquery-1.11.0.min.js", "myscript.js"], 由于,您无法访问不在同一域上的iFrame的内容。它们对页面上运行的所有脚本或扩展完全不透明(即

我已经做了一个很棒的chrome扩展,它可以编辑我不喜欢的单词…除了我无法在iframes中使用它…我的清单中已经有了:

   "matches": ["<all_urls>"],
   "all_frames": true,
    "run_at" : "document_idle",
  "js": ["jquery-1.11.0.min.js", "myscript.js"],
由于,您无法访问不在同一域上的iFrame的内容。它们对页面上运行的所有脚本或扩展完全不透明(即javascript甚至看不到内容)。你无能为力。除非iframe的源是完全相同的域(这将是罕见的),或者源页面具有访问控制允许源标题集(也是罕见的),否则任何浏览器中运行的代码都无法访问该iframe的任何内容。虽然它有时令人恼火,但它是一种极其重要的安全功能,可以防止各种恶意活动


编辑:对不起,我最初写CORS的时候是指同一原产地政策。CORS是绕过SOP执行代码的方法,但它需要访问控制,允许设置源代码。

我完全理解跨源资源共享及其重要性。但是,我希望在浏览器级别更改文本…是否有一个chrome浏览器API可以实现相同的结果?我之所以使用javascript,是因为它很简单。这就是我要说的。除非iframe的源是完全相同的域(这将是罕见的),或者源页面具有访问控制允许源标题集(也是罕见的),否则任何浏览器中运行的代码都无法访问该iframe的任何内容。除非你自己编写的浏览器忽略了CORS.-1,否则你就不走运了,因为答案错误地表明在Chrome扩展中不可能替换iframes中的文本。Chrome扩展有一些方法可以在不同的框架中运行代码。抱歉@RobW,但是你错了,除非,正如我已经提到的,iframe来自同一个来源或者设置了a-C-a-O。原来的问题显然是在寻找一种方法来替换所有iFrame中的文本,这是不可能的。@Mordred普通网页无法访问其他来源的内容,但Chrome扩展可以。问题(
“所有帧”:true
)中说明了实现方法。(失败的原因与iFrame无关,但与jQuery只能选择元素而不能选择文本节点这一事实有关。因此,具有

s的元素文本节点将不匹配。)
$('body :not(:has(*))').text(function(i, v) {
  return v.replace(/OFFENDING-WORD/ig, '▓▓▓▓▓▓');    
});