簡體   English   中英

MutationObserver報告ASP頁面內的幀集沒有變化

[英]MutationObserver reports no changes in framset within asp page

我正在嘗試使用Tampermonkey在Opera上編寫一個用戶腳本(盡管我已經嘗試過ViolentMonkey並獲得了相同的結果),該腳本將在路由器的配置頁面上運行,並根據顯示的統計數據計算一些值。

問題是,它是一個.asp頁,只有一個frameset (沒有body元素,盡管我不知道這對asp是否正常,從未使用過),並且其中包含3個frame元素。 在嘗試了一些DOM方法后,雖然可行,但由於URL不變,因此需要一些非常微不足道的方法來實際檢測頁面上的內容,我偶然發現MutationObserver會踢屁股,但我似乎無法使它返回任何事件, 不管我做什么。

當我在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有關系嗎?

編輯-具有諷刺意味的是,除了路由器的界面之外,我能找到的唯一在線測試代碼的地方是The World's Worst Website 甚至jsfiddle和codepen也不會忍受framesetframe

我要休息一下。 我最初想以這種方式解決我的問題,以避免使用油膩的monkey api來存儲值(因為如果我在框架的上下文中並且刷新,則擦除存儲的變量),並使用一種更優雅,更簡單的檢查方法是否在特定框架中加載了特定的網址。 事實證明,當在frame加載新的網址時,瀏覽器(Chrome,Firefox,Opera)不會產生事件(由於沙箱操作,我不知道iframes的行為是否相同,或者iframes行為與古代frames不同) )。

總而言之,如果您需要執行以下操作(在刷新一次幀之間的用戶腳本中保留一個變量),請使用@match指令將您要監視的特定幀作為目標,並使用@match api(或您的用戶腳本中的任何api)擴展名用於永久存儲值)。 如果要在自己制作的網站上執行此操作, 請不要使用框架 (最好), 也不要使用postMesssage或在需要的地方附加事件處理程序。

要點是,框架太糟糕了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM