我創建了下面的Greasemonkey腳本來自動跳到我過去的蒸汽時代檢查網頁:表單屬性「未定義」在某些情況下錯誤,但不是別人
// ==UserScript==
// ...
// @include http://store.steampowered.com/agecheck/*
// ==/UserScript==
//Mini script for doing steam age checks automatically
if(document.URL.indexOf('agecheck') > -1)
{
var form = document.getElementById('agegate_box').getElementsByTagName('form')[0];
form.ageDay.value = 18;
form.ageMonth.value = 'August';
form.ageYear.value = 1987;
form.submit();
}
這樣一個頁面的一個例子是: http://store.steampowered.com/agecheck/app/16730/。請注意,如果您設置了store.steampowered.com
「生日期」cookie,則此頁面會自動跳到遊戲中,因此您可能必須先刪除它。
當這個greasemonkey腳本安裝在運行在Windows XP上的Firefox 17.0(beta)上時,它工作正常。
然後,我在我的Windows 7機器上運行最新的FF(16)上安裝了該腳本。在這臺機器上,當訪問form.ageDay時腳本中斷。錯誤控制檯顯示:
Error: form.ageDay is undefined
更奇怪的是,雖然是,如果我只是我的腳本粘貼到Firefox的暫存器(Shift + F4)並執行它,它的工作原理查找和形式提交。
在XP上,GM腳本是如何工作的,而在Win7中腳本是在暫存器中工作,但是在Win7上腳本不能在GM中工作?另一個奇怪的是,在Win7機器上,如果我激活Firebug,var form
顯然具有'ageDay'屬性,但watch表達式返回undefined?
訪問形式的元素的這樣非常古老(「DOM level 0」)。也許通用汽車(部分?)放棄對它的支持?我不知道,只是一個猜測。 – bfavaretto
我不熟悉GM腳本 - 但是他們可以在DOM準備好之前執行嗎?即表單尚未實際完成加載? – Matt
@Matt GreaseMonkey腳本本身在'DOMContentLoaded'上執行:http://wiki.greasespot.net/DOMContentLoaded – Alain