2010-09-30 4 views
2

У меня есть следующие довольно простые Greasemonkey скрипт:Запуск Greasemonkey скрипт на странице без HTML

var newloc = location.href.replace(/^(.*)-xyz-(.*)$/i, "$1$2"); 
if (newloc != location.href) 
    location.href = newloc; 

То есть, в основном обрезает «-XYZ-» из URL и снова загружает страницу. Поэтому, если вы перейдете к «www.example.com/a-xyz-b/», он перезагрузит страницу на «www.example.com/ab/».

Теперь скрипт работает нормально, если страница является HTML-страницей. Но если я открою файл .jpg или что-то, что не HTML, то скрипт не запускается вообще.

Это просто ограничение greasemonkey? Что это работает, только если страница на самом деле text/html? Каков альтернативный способ выполнения этой функции?

ответ

2

Да, Greasemoney срабатывает по событию DOMContentLoaded, которое, похоже, не срабатывает на объектах мультимедиа (без DOM).

Обходите это, активируя страницы родителя/реферера и меняя ссылки.

Или, если имена файлов находятся на локальной машине, используйте текстовый редактор или пакетное задание для переименования/перезаписи ссылок/имен.

Если ни одно из этих обходных путей не является жизнеспособным, опубликуйте конкретные сведения о том, как вы загружаете эти URLS в FireFox (назовите используемый браузер, если это не FF).

+0

Хм, интересно. Я действительно делал это только как услугу для клиента, и я не знаю всех подробностей, но спасибо ... вы дали мне несколько идей для продолжения. Если я получу больше, я обновлю вопрос :) –

+0

Начиная с Firefox 27.0.1, по крайней мере для содержимого 'application/json', сценарий greasemonkey отлично срабатывает, когда JSON завершил загрузку, без каких-либо дополнительных действий. Кроме того, если это не срабатывает, попробуйте [изменить '@ run-at' на' document-start'] (http://stackoverflow.com/q/4978736/521032), а затем посмотреть ' readyState' или, в крайнем случае, использовать таймер. – Septagram