理论上,如果设置了run_at,用于在页面上选择元素的.js应该会在页面完全加载之后触发。但情况似乎并非如此。
在我的content.js里
"content_scripts": [
{
"js": ["extensions/jquery-2.2.2.min.js", "content.js"],
"run_at": "document_idle"
}
]
在我的content.js中,我只需要:
alert("alert");
console.log("hello");
var fullname2 = $('#topcard').find('.profile-info').find('h1').text();
console.log(fullname2);
警报和第一个console.log都能工作。第二个控制台日志不记录任何内容,因为选择器无法选择任何内容。我之所以知道这一点,是因为如果我为setTimeout代码块添加一个content.js,并等待2秒,那么第二个控制台日志将正确显示fullname2。
知道为什么在页面完全加载之前,content.js显然是在开火,以至于选择器找不到任何东西吗?
发布于 2016-05-19 09:34:20
run_at: "document_idle"
保证脚本在DOMContentLoaded
事件之后执行,该事件指示所有静态 DOM内容都已解析并可用。
如果一个元素还不存在,这意味着它将在稍后由页面自己的代码动态添加。
显然,Chrome无法预测什么时候(如果有的话!)页面处于“完成”状态。您需要设置自己的标准(比如“当#topcard
出现时”)。
话虽如此,您的策略应该如下:
MutationObserver
实现的,为了简单起见,我强烈推荐使用 library。https://stackoverflow.com/questions/37310596
复制相似问题