Javascript 在新创建的iframe上从我的Chrome扩展执行脚本

Javascript 在新创建的iframe上从我的Chrome扩展执行脚本,javascript,google-chrome,iframe,google-chrome-extension,Javascript,Google Chrome,Iframe,Google Chrome Extension,我正在尝试创建一个Chrome扩展,它将spotify:URI转换为可点击的链接。代码正常(解析、替换等),在“经典”网站上一切正常 但是,当使用web客户端Hangouts(Hangouts.google.com)时,每个聊天窗口都是动态创建的新iframe,并且脚本似乎没有执行 正如我所读到的,在iframe中执行脚本并不是最简单的事情。多亏了SO上的另一篇文章,我实现了将我的JS文件加载到iFrame,但代码仍然没有执行 manifest.json { "manifest_ver

我正在尝试创建一个Chrome扩展,它将
spotify:
URI转换为可点击的链接。代码正常(解析、替换等),在“经典”网站上一切正常

但是,当使用web客户端Hangouts(Hangouts.google.com)时,每个聊天窗口都是动态创建的新iframe,并且脚本似乎没有执行

正如我所读到的,在iframe中执行脚本并不是最简单的事情。多亏了SO上的另一篇文章,我实现了将我的JS文件加载到iFrame,但代码仍然没有执行


manifest.json

{
    "manifest_version": 2,

    "name": "Spotilink",
    "description": "Transforms Spotify's URI into a clickable link",
    "version": "0.1",

    "content_scripts": [
        {
            "matches": ["<all_urls>"],
            "js": ["findAndReplaceDOMText.js", "spotilink.js", "script.js"],
            "all_frames": true
        }
    ],

    "permission": [
        "active_tabs"
    ],

    "web_accessible_resources": ["script.js"]
}
spotilink.js

document.addEventListener("DOMContentLoaded", findAndReplaceDOMText(document.documentElement, {
    find: /[A-Za-z0-9]*/gi,
    replace: function(portion, match) {
        var a = document.createElement('a');
        a.className = 'spotilink';
        a.setAttribute('href', match);
        a.textContent = portion.text;
        return a;
    }
}));
findAndReplaceDOMText.js

document.addEventListener("DOMContentLoaded", findAndReplaceDOMText(document.documentElement, {
    find: /[A-Za-z0-9]*/gi,
    replace: function(portion, match) {
        var a = document.createElement('a');
        a.className = 'spotilink';
        a.setAttribute('href', match);
        a.textContent = portion.text;
        return a;
    }
}));
只需要一个库来解析DOM并替换匹配的元素


总而言之:解析和替换很好(
spotilink.js
findAndReplaceDOMText.js
很好地完成了这项工作),但是在动态创建的iFrame中获得相同的结果并不是一件容易的事


知道我在哪里遗漏了什么吗?

Hangout很可能会创建src等于about:blank的iFrame,因此您需要“match_about_blank”:在内容脚本的清单中为true。@wOxxOm不,没有更好的效果:-/好的,在devtools中调试它。关注事项:1)清单中的描述值具有无效的双引号,2)您在页面上下文中运行的代码未包装在IIFE中。Hangout很可能创建的iFrame的src等于about:blank,因此您需要“match_about_blank”:在内容脚本的清单中为true。@wOxxOm nope,效果不好:-/Well,在devtools中调试它。关注事项:1)清单中的描述值具有无效的双引号,2)在页面上下文中运行的代码未包装在IIFE中。