如何在页面中获取更改的内容?

时间:2010-10-13 05:43:06

标签: google-chrome greasemonkey mutation-events

我为最新的Chrome浏览器编写了一个用户脚本。似乎脚本在加载后无法获取页面的更改内容(例如,在页面加载后,我点击了¿sth?并弹出一个嵌入的窗口)。

即使我使用window.setTimeout(),我仍然无法通过document.getElementById()获取定时器回调中的更新内容。我检查了页面,发现弹出元素存在于DOM中。

这是用户脚本的限制吗?或者可以使用其他一些方法在用户脚本中获取更新?

更新 我按照建议尝试了DOMSubtreemodified事件。但这种行为仍然很奇怪。

我在my.safaribooksonline.com的用户脚本中只添加了一行JavaScript,

document.addEventListener("DOMSubtreeModified", function () {
    alert(eval('typeof OpenSignInPopup')); });

但警告框显示“未定义”作为OpenSignInPopup的评估结果。但我可以在同一页面的脚本控制台中同时运行alert语句,并将结果显示为“function”。

首先运行用户脚本时未加载此函数。那么如何在用户脚本中使用它?

1 个答案:

答案 0 :(得分:1)

您需要提供详细信息,例如相关的代码段和目标网页。

通常,您可以在Chrome中触发DOMSubtreeModified事件。这应该可以让您访问更改的DOM。

此外,您确定新内容不在iframe中吗?

更新新的OP信息:

  

但是警告框显示“未定义”作为OpenSignInPopup的评估结果。

在Chrome中,Greasemonkey代码无法与页面的JS函数进行交互。您需要将代码注入页面。有关详细信息,请参阅this SO answer