Chrome扩展没有将Javascript注入iframe



我有一个contentscript,它本质上是做一个console.log来指示它已经被注入到页面中,而我的manifest.json将all_frames设置为true。

因此,如果我去http://www.reddit.com/r/videos我每帧都会看到一条消息,如果我点击视频,我还会看到一条来自注入视频iframe的脚本的消息。这向我表明,如果页面被动态修改为包含iframe,那么contentscript就会被注入其中

当我去http://www.html5video.org,我只从一帧中得到一条消息,但如果我查看DOM,我会发现视频有一个iframe,所以我希望将我的内容脚本注入其中,但事实并非如此。

我的最终目标是在页面上获得视频的选择器,我希望能够通过将查找它的代码注入iframe来实现这一点。

感谢您的帮助。

我怀疑Chrome会将您的内容脚本注入到IFRAME中,该IFRAME是原始页面源的一部分,reddit.com的例子就是这样——IFRAME也是原始页面的一部分。对于html5视频链接,IFRAME不是原始源的一部分。但是,如果您检查元素,您可以看到IFRAME,这向我表明IFRAME已动态加载到DOM中。我在我写的扩展中看到了同样的行为,所以它看起来是一致的。

如果您需要注入IFRAME,那么也许您可以挂接DOM创建事件并采取您需要的操作:

document.addEventListener('DOMNodeInserted', onNodeInserted, false);

更新:

这个干什么http://html5video.org/-使用以下content_script代码,我可以获得IFRAME,然后获得VIDEO标记。注意:这种方法/概念也应该适用于Reddit。

content_script.js

console.log("content script for: " + document.title);
var timer;
document.addEventListener('DOMNodeInserted', onNodeInserted, false);
function onNodeInserted(e)
{
    if(timer) clearTimeout(timer);
    timer = setTimeout("doSomething()", 250);
}
function doSomething()
{
    $media = $(".mwEmbedKalturaIframe");
    console.log($media);
    $video = $media.contents().find("video");
    console.log($video);
}

manifest.json

{
  // Required
  "name": "Foo Extension",
  "version": "0.0.1",
  // Recommended
  "description": "A plain text description",
  "icons": { "48": "foo.png" },
  //"default_locale": "en",
  // Pick one (or none)
  "browser_action": {
    "default_icon": "Foo.png", // optional
    "default_title": "Foo Extension"      // optional; shown in tooltip
    },
  "permissions": [ "http://*/", "https://*/", "tabs" ],
  "content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "js": ["jquery-1.7.1.min.js", "content_script.js" ],
      "run_at": "document_idle",
      "all_frames": true
    }
    ]
}

另请参阅:jQuery/JavaScript:访问iframe 的内容

最新更新