Скрипт Greasemonkey запускается только при перезагрузке страницы

Я работаю над сценарием Greasemonkey, чтобы превратить текст в ссылки наралли стр. Скрипт работает отличноonly когда я перезагружаю страницу. Если я перехожу на страницу каким-либо образом (ссылки, браузер вперед / назад), скрипт не запускается, несмотря на то, что в меню Greasemonkey мой скрипт отображается внизу с галочкой.

Вот пример URL:

<code>https://rally1.rallydev.com/#/4745909548/detail/userstory/6138899084/changesets
</code>

Мое правило соответствия:

<code>/^https://.*\.rallydev\.com/.*/changesets$/
</code>

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

Не уверен, куда идти отсюда. Любая помощь приветствуется.

 Tom Wijsman04 мая 2012 г., 23:32
Если это работает на перезагрузку, то я сомневаюсь, что соответствие будет иметь значение ...
 neilw05 мая 2012 г., 00:45
Согласитесь, я включил эту информацию, потому что подумал, что кто-то спросит. :)

Ответы на вопрос(1)

Решение Вопроса

Невозможно быть уверенным в том, что происходит, потому что целевые страницы находятся за платежной стеной и их предполагаемой «бесплатной пробной версией». механизм выдувает куски.

Вот некоторые возможные причины текущего поведения:

The initial request is insecure (http) but redirects to a secure page (https). The first page load does a some other kind of redirect to the actual page. The target content is in an <iframe> that does not load right away. The target content is AJAXed-in. Something exotic that we would need to see the actual page to figure out. The initial URL does not really end in changesets.

Кроме того, привыкнуть избегать/вmiddle регулярных выражений. Это не всегда необходимо, но в конечном итоге вас укусят в [цензуре], если вы этого не сделаете. Так что скрипт должен использовать:

// @include  /^https:\/\/.*\.rallydev\.com\/.*\/changesets$/

для начала, но см. ниже.


Шаги к решению:

Change your @include to account for http and the Possibility of trailing space or trailing slash in the URL. Use:

// @include  /^https?:\/\/.*\.rallydev\.com\/.*\/changesets(?:\s|\/)*$/
Examine the page with Firebug. Is the content AJAXed-in? Is it in an <iframe>? If so, what is the iframe URL, if any? To also detect AJAX and/or redirects, use Firebug's Net panel and/or Wireshark. If possible, provide us with login credentials so that we may see a problematic page. Snapshot a problematic page (Save it via Firefox) and link to that HTML and JS in Pastebin.com.

Consider using code like:

if (window.top != window.self) {
    //--- Don't run on/in frames or iframes.
    return;
}

To have the script run only in (or not in) iframes, as applicable.


Если проблема вызвана задержками AJAX (или загрузкой нового контента), обойти это, используяwaitForKeyElements() utility как показано в& quot; Сценарий Fire Greasemonkey по запросу AJAX & quot;.

 neilw07 мая 2012 г., 17:21
Это было чрезвычайно полезно, большое спасибо. Это была проблема AJAX, хотя изначально я был одурачен тем, как были настроены ссылки на странице. Я попытался использовать waitForKeyElements (), применив правило ко всему домену, и, похоже, оно работает. Это немного тяжеловесно (жаль, что мне не нужно загружать jQuery), но это работает и кажется надежным. Спасибо за связку.
 08 мая 2012 г., 00:40
Добро пожаловать. Я когда-то думал о созданииwaitForKeyElements это не требовало jQuery, но все, кроме самых простых из моих сценариев, все равно используют jQuery. Это не так тяжеловесно, тем более что GM запускает его на вашей локальной машине, когда вы используете@require директивы. И удивительное совершенство jQuery делает создание сценариев намного проще.
 21 июл. 2014 г., 21:32
Большое спасибо всем участникам. Я работаю с процессом проверки Amazon, и сначала я этого не понял, но они AJAX загружают каждую "страницу". и изменение URL черезwindow.location.pathname, Я обновил свой скрипт, чтобы @include любая страница в процессе и легко преобразовал его для использованияwaitForKeyElements, Это 3-х минутное решение того, что было бы огромным кошмаром отладки.

Ваш ответ на вопрос