2011-04-19 4 views
1

Это страница, которую я пытаюсь изменить, я хочу обойти таймер обратного отсчета, как написать сценарий? Есть ли способ изменить переменную document.licenseform.btnSubmit.disabled на использование Greasemonkey?Как изменить переменную JavaScript с помощью Greasemonkey?


<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
    <title>dsfsdf</title> 
</head> 
<body> 
<form name="licenseform" method="post" action=""> 
<input name="btnSubmit" type="button" value="我同意"> 
</form> 
<SCRIPT language=javascript type=text/javascript> 
    <!-- 
        var secs = 9; 
        var wait = secs * 1000; 
        document.licenseform.btnSubmit.value = "我同意 [" + secs + "]"; 
        document.licenseform.btnSubmit.disabled = true; 

        for(i = 1; i <= secs; i++) 
        { 
          window.setTimeout("Update(" + i + ")", i * 1000); 
            //这一句很关键,记得参数写法为("update("+i+")",i*1000) 
        } 
        window.setTimeout("Timer()", wait); 


        function Update(num) 
        { 
          if(num != secs) 
          { 
           printnr = (wait/1000) - num; 
           document.licenseform.btnSubmit.value = "我同意 [" + printnr + "]"; 
          } 
        } 

        function Timer() 
        { 
          document.licenseform.btnSubmit.disabled = false; 
          document.licenseform.btnSubmit.value = " 我同意 "; 
        } 
        --> 
        </SCRIPT> 
    </td> 
    <!--网页中部中栏代码结束--> 
</body> 
</html> 

ответ

0

попытаться вызвать функцию таймера(), так как его то, что вы хотите случиться так или иначе:

unsafeWindow.Timer(); 

пока вы на него, измените функцию обновления чтобы ничего не делать:

unsafeWindow.update = function(){} 
0

Это возможно. Короткий ответ вы можете использовать объект unsafeWindow, например

unsafeWindow.document.licenseform.btnSubmit.disabled = true; 

Однако это не recomemended сделать это, потому что это небезопасный. Подробнее об этом здесь: http://wiki.greasespot.net/UnsafeWindow

4

Более безопасная альтернатива использованию 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); 

Помните, что при использовании сериализованной формы функции таким образом нормальная область закрытия не будет работать. Функция, которую вы вводите, не будет иметь доступа к переменным в вашем скрипте, если они не определены внутри этой функции.

0

Не обращайте внимания на что-либо о «небезопасном», поскольку операция записи в сценарии -> отлично защищена.

unsafeWindow.document.licenseform.btnSubmit.disabled = false; 

(метод Используйте mkoryak для подавления тайм-аута обратного вызова) что данная форма не содержит ничего, кроме ожидания, так что вы можете обойти его полностью:

// this example is INSECURE 
unsafeWindow.document.licenseform.submit(); 

См?

+0

Для возобновления: все, что связано с небезопасными вещами, небезопасно. Все остальное безопасно. Видеть? ;) –

Смежные вопросы