2

Я пытаюсь написать сценарий greasemonkey, который проверяет firefox, если на странице отображается ошибка 404. Если это так, сценарий должен перезагрузить страницу. Сценарий выглядит так:Как обработать исключение, исключенное из разрешений, на странице 404?

// ==UserScript== 
// @name  404-reloader 
// @namespace None 
// @include  * 
// @version  1 
// ==/UserScript== 

url = "http://www.example.com"; 

if (document.getElementById("errorPageContainer")) 
    location.href = url; 

Моя проблема в том, что она работает только иногда. Чтобы проверить это, я отключил свой беспроводной адаптер и загрузил страницу. Сценарий не был таким, поэтому я начал его вручную. В первый раз, когда я начал работать, скрипт работал и менялся на example.com, где я получил еще одну не найденную ошибку, потому что адаптер все еще был выключен. Я снова начал сценарий, и он сработал. После третьего раза я получил исключение в сценарии:

/* 
Exception: Permission denied to access property 'document' 
@Scratchpad/2:10 
*/ 

я узнал, что, когда я изменить URL, скрипт workes один раз. Впоследствии я получаю это исключение. Когда скрипт не работал, я скопировал его в консоль firebug и запустил его. Он работал там, но все еще не в сценарии greasemonkey.

Теперь я хотел бы знать, почему greasemonkey ведет себя так и как я обрабатываю проблему с Исключением и проблему, которую Greasemonkey не запускает самостоятельно на странице 404.

Я уже искал ответы, но не нашел ничего полезного для моей проблемы.

Спасибо за вашу помощь

ответ

1

Я думал, что это особенность на самом деле, что GM не работает на страницах ошибок, во всяком случае, это работает для меня:

Вместо бега на document-end, который по умолчанию, когда это вы запускаете на document-start и добавляете слушателя для DOMContentLoaded, он работает хорошо для меня, даже при перезагрузке. Обратите внимание, что @run-at является GM-специфическим (> = 1.0), до сих пор не переносимым в Chrome/Opera, насколько я знаю.

// ==UserScript== 
// @name  test123 
// @namespace test123 
// @version  1 
// @include  * 
// @grant  none 
// @run-at  document-start 
// ==/UserScript== 

document.addEventListener("DOMContentLoaded", function() { 
    console.log(document.getElementById('errorPageContainer')); 
}); 
+0

я попытался включить это в мой сценарий, а затем скопировал его, как именно вы написали, но он не работает :(она до сих пор не работает при запуске, и я до сих пор получить разрешение отказано ошибка. I также проверил мою версию greasemonkey: 1.9 – user2527199

+0

Ну, я отрезал некоторые метаданные в исходном сообщении (в частности, '@ include'), работает ли это сейчас? Firefox 22, GM 1.9 –

+0

Нет, у меня все же возникают те же ошибки. скрипт точно, как он стоял там и пробовал его.Афтар, я сделал некоторые изменения, чтобы экспериментировать с ним, но он не работает.Есть ли какой-либо параметр, который мне нужно изменить в Firefox или GM? Он запускается в вашем браузере? У меня есть FF21, GM1.9. Может ли это быть ошибкой в ​​FF21? – user2527199

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