奇妙な問題があります。FirefoxとGoogleChromeで実行するGreaseMonkeyスクリプトを作成しようとしています。Chromeで、「TamperMonkey」と「Blank Canvas Script Handler」の2つの拡張機能を試しました。これは主に、スクリプトが外部サイトで新しいバージョンを定期的にチェックし、これがクロスサイトスクリプティングと見なされてChromeで許可されていないためです。
私の問題を示すために、簡単なテストケースを作成します。
// ==UserScript==
// @name test
// @namespace http://fgs.ericc-dream.fr.nf
// @description test gm script
// @include http://gaia.fallengalaxy.eu/
// @author ericc
// @version 0.0.1
// ==/UserScript==
/* We attach an event listener to the body tag and trigger the function
* 'message' each time that an element is inserted in the page */
var el = document.body;
el.addEventListener('DOMNodeInserted', message, false);
var extraFlag = false;
function message(event) {
/* first we capture the id of the new inserted element
* (the one who created the event) */
var objId = event.target.id;
/* add an event listener on the map container */
if (objId == "extra") {
el = document.getElementById('extra');
el.addEventListener('DOMSubtreeModified',readTest,false);
GM_log(el.style.display);
}
}
function readTest() {
el = document.getElementById('extra');
GM_log(extraFlag);
GM_log(el.style.display);
if ((el.style.display != 'none') && (!extraFlag)) {
alert('extra');
extraFlag = true;
} else if ((el.style.display == 'none')) {
extraFlag = false;
}
}
div要素'extra'はページによって変更されます。問題は、Chromeがel.style.displayの値を読み取ることができないため、extraFlagが再び「false」になることはないということです。私はこのフラグを使用して、コードを何度も実行しないようにしています。サイトはJavaScript駆動型です。このコードはFirefoxでうまく機能します。
Googleで検索しようとしましたが、正解が見つかりません。表示の値を変更するのは簡単なようですが、それを読もうとしているのは私だけのようです!!!
「DOMAttrModified」はChromeでサポートされていないため、このコードを記述します:-(
よろしくお願いします
ericc