我为最新的Chrome浏览器编写了一个用户脚本。似乎脚本在加载后无法获取页面的更改内容(例如,在页面加载后,我点击了¿sth?并弹出一个嵌入的窗口)。
即使我使用window.setTimeout()
,我仍然无法通过document.getElementById()
获取定时器回调中的更新内容。我检查了页面,发现弹出元素存在于DOM中。
这是用户脚本的限制吗?或者可以使用其他一些方法在用户脚本中获取更新?
更新
我按照建议尝试了DOMSubtreemodified
事件。但这种行为仍然很奇怪。
我在my.safaribooksonline.com的用户脚本中只添加了一行JavaScript,
document.addEventListener("DOMSubtreeModified", function () {
alert(eval('typeof OpenSignInPopup')); });
但警告框显示“未定义”作为OpenSignInPopup
的评估结果。但我可以在同一页面的脚本控制台中同时运行alert语句,并将结果显示为“function”。
首先运行用户脚本时未加载此函数。那么如何在用户脚本中使用它?
答案 0 :(得分:1)
您需要提供详细信息,例如相关的代码段和目标网页。
通常,您可以在Chrome中触发DOMSubtreeModified
事件。这应该可以让您访问更改的DOM。
此外,您确定新内容不在iframe中吗?
但是警告框显示“未定义”作为OpenSignInPopup的评估结果。
在Chrome中,Greasemonkey代码无法与页面的JS函数进行交互。您需要将代码注入页面。有关详细信息,请参阅this SO answer。