我目前正在编写一个非常简单的Google Chrome浏览器扩展程序,它利用内容脚本,通过抓取元素并在页面完成加载时附加到其网页上,将其他文本简单地添加到网页上。加载后立即修改页面元素
问题是,我正在修改的网页在媒体上很丰富,需要几秒钟才能加载,因此导致其他文本在加载文本的其余部分后几秒钟才显示。
我抓的元素是span
。有没有什么方法可以监听这个元素,以便我可以尽快修改它?
我目前正在编写一个非常简单的Google Chrome浏览器扩展程序,它利用内容脚本,通过抓取元素并在页面完成加载时附加到其网页上,将其他文本简单地添加到网页上。加载后立即修改页面元素
问题是,我正在修改的网页在媒体上很丰富,需要几秒钟才能加载,因此导致其他文本在加载文本的其余部分后几秒钟才显示。
我抓的元素是span
。有没有什么方法可以监听这个元素,以便我可以尽快修改它?
正如在评论中指出,在“document_start”使用manifest设定注入你的内容脚本“run_at”
然后用MutationObserver
上document
听要添加它。
的Javascript
new MutationObserver(function (mutations) {
mutations.some(function (mutation) {
console.log(mutation);
if (mutation.type === 'childList') {
return Array.prototype.some.call(mutation.addedNodes, function (addedNode) {
if (addedNode.id === 'added') {
mutation.target.textContent = 'Added text';
return true;
}
return false;
});
}
return false;
});
}).observe(document, {
attributes: false,
attributeOldValue: false,
characterData: false,
characterDataOldValue: false,
childList: true,
subtree: true
});
document.addEventListener('DOMContentLoaded', function onDOMContentLoaded() {
var div = document.createElement('div');
div.id = 'added'
document.body.appendChild(div);
console.log('Added a div');
}, true);
见[清单](https://developer.chrome.com/extensions/content_scripts),特别'run_at',即 “run_at”: “document_start” – Xotic750
@ Xotic750在“document_idle”或“document_end”中运行会产生我在OP中描述的效果。在“document_start”处运行结果不起作用,因为要修改的页面元素尚不存在。 – DannyF247
@ DannyF247看到这个[规范问题](http://stackoverflow.com/questions/2844565/is-there-a-jquery-dom-change-listener)。在开始时注入,倾听改变。 – Xan