Более безопасной альтернативой использованию unsafeWindow
является внедрение кода в документ.Внедренный вами код будет работать в том же контексте, что и код страницы, поэтому он будет иметь прямой доступ ко всем переменным там.Но у него не будет доступа к переменным или функциям в других частях кода вашего пользовательского скрипта.
Другое преимущество внедрения кода заключается в том, что написанный таким образом пользовательский скрипт будет работать как в Chrome, так и в Firefox.Chrome вообще не поддерживает unsafeWindow
.
Мой любимый способ ввода кода - написать функцию, а затем использовать этот повторно используемый код для возврата исходного кода функции:
// Inject function so that in will run in the same context as other
// scripts on the page.
function inject(func) {
var source = func.toString();
var script = document.createElement('script');
// Put parenthesis after source so that it will be invoked.
script.innerHTML = "("+ source +")()";
document.body.appendChild(script);
}
Чтобы переключить btnSubmit
, вы можете написать скрипт, подобный следующему:
function enableBtnSubmit() {
document.licenseform.btnSubmit.disabled = false;
document.licenseform.btnSubmit.value = " 我同意 ";
// Or just invoke Timer()
}
function inject(func) {
var source = func.toString();
var script = document.createElement('script');
script.innerHTML = "("+ source +")()";
document.body.appendChild(script);
}
inject(enableBtnSubmit);
Помните, что при использовании сериализованной формы функции таким образом нормальная область закрытия не будет работать.Введенная вами функция не будет иметь доступа к переменным в вашем скрипте, если они не определены внутри этой функции.