MutationObserver报告asp页面中的framset没有变化
MutationObserver reports no changes in framset within asp page
我正在尝试使用Tampermonkey在Opera上编写一个用户脚本(尽管我已经尝试了ViolentMonkey,但结果相同(,该脚本将在我的路由器的配置页面上运行,并根据显示的统计信息计算一些值。
问题是,这是一个.asp页面,只有一个frameset
(没有body元素,尽管我不知道这对asp来说是否正常,但从未使用过它(和3个frame
元素。在尝试了一些DOM方法后,我偶然发现了MutationObserver
,它很有用,但由于url没有改变,需要一些非常不雅的方法来实际检测页面上的内容,但无论我做什么,我似乎都无法让它返回任何事件。
当我在google.com
上试用MutationObserver
时,它可以正常工作并报告。到目前为止,我的代码只是对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有关?
编辑-具有讽刺意味的是,除了路由器的接口,我在网上唯一能找到的测试代码的地方是世界上最糟糕的网站。即使是jsfiddle和codepen也无法忍受frameset
和frame
。
我要解决这个问题。我最初想用这种方式来解决我的问题,以避免使用防油麦api来存储值(因为如果我在一个帧的上下文中刷新,存储的变量会被擦除(,并使用一种更优雅、更简单的方式来检查特定帧是否加载了特定的url。事实证明,当在frame
中加载新的url时,浏览器(Chrome、Firefox、Opera(不会产生事件(我不知道iframes
的行为是否相同,是因为沙盒,还是iframes
的行为与古代的frames
不同(。
总之,如果您需要做这样的事情(在刷新帧之间在用户脚本中维护一个变量(,请使用@match
指令瞄准您特别想要监视的帧,并使用油麦键api(或您的用户脚本扩展具有的用于永久存储值的任何api(。如果你想在自己制作的网站上做到这一点,不要使用框架(最好(,也不要使用postMesssage
或在需要的地方附加事件处理程序。
要点是,框架很糟糕。
- 如何在呈现页面后使用 Java 脚本检测 dom 元素值的值是否有任何变化(例如,任何输入或复选框值更改)
- 为什么 HTML 文本字段的值在有逗号时会发生变化
- 有没有人知道如何检测 Nativescript 的方向变化
- 有没有办法防止选择菜单在值动态变化时关闭
- 有没有一种简单的方法来检测容器元素中的焦点变化
- 版本 2 和 3 之间的上传 API 有哪些主要变化
- 使用未知数量的案例进行切换 - 略有变化的默认情况
- 剑道网格有变化,如何处理只读网格
- 有没有办法在 javascript 中的值发生变化时运行代码
- 如何在函数中有一个动态变量,而不将其链接到变化的变量
- 如何在网站上制作动画,每秒钟就会有一段文本发生变化
- backbone.js:自上次服务器保存以来有变化吗
- Ng显示当页面上有多个控制器的布尔值发生变化时不更新
- 在AngularJS中有没有一种方法可以在不使用$watch的情况下对模型变化做出反应?
- MutationObserver报告asp页面中的framset没有变化
- 如果文本框中有变化,则模糊
- 如何组合两个相似的脚本,并在略有变化的情况下运行它
- 检查窗口大小是否有变化和性能/优化
- 如何知道日期是否有变化的日期picker jQuery
- 当有变化时,自动更新所有用户的HTML dom