我正在尝试使用 Tampermonkey 在 Opera 上编写一个用户脚本(尽管我已经尝试过 ViolentMonkey 并获得相同的结果),它将在我的路由器配置页面上运行并根据显示的统计数据计算一些值。
问题是,它是一个 .asp 页面,只有一个frameset
(没有 body 元素,虽然我不知道这对于 asp 是否正常,从未使用过它)和其中frame
的 3 个元素。在尝试了一些 DOM 方法之后,这些方法有效但需要一些非常不雅的方法来实际检测页面上的内容,因为 url 没有改变,我偶然发现了MutationObserver
哪个踢屁股,但我似乎无法让它返回任何事件,不管我做什么。
MutationObserver
当我试穿并正常报告时,它的工作原理google.com
。到目前为止,我的代码只是这个MutationObserver
功能测试,所以它几乎是从这里复制/粘贴的,看起来像这样(稍作修改):
// ==UserScript==
// @name meh
// @match http://192.168.1.1/cgi-bin/index.asp
// @run-at document-end
// ==/UserScript==
// MDN code starts here
var target = document.body;
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log(mutation.type);
});
});
var config = { attributes: true, childList: true, characterData: true, subtree: true };
observer.observe(target, config);
// end of userscript
这个确切的代码在google.com
. 我的@match
指令也不是问题,因为我将观察者记录到控制台(此处未显示)以确保它与正确的 url 匹配。
我已经尝试了各种元素作为目标(以防万一出现问题)window.frames['framename'].document.body
之类的,并且我尝试过subtree
在配置中使用和不使用,以及document-start
用于@run-at
指令。无论如何,我没有将任何突变记录到控制台中。
我无法在网上找到任何关于这个特殊案例的信息,所以我需要问一下,.asp 页面有什么特别的地方可以弄乱,MutationObserver
或者这与frame
s 和frameset
s 有什么关系吗?
编辑 - 具有讽刺意味的是,除了路由器接口之外,我能找到的唯一在线测试我的代码的地方是The World's Worst Website。甚至 jsfiddle 和 codepen 都无法忍受frameset
and frame
。