Всплывающие окна загружаются и закрываются асинхронно, поэтому такие вещи, как "wondows.getElementById("vte_mark_5")
", не будут работать сразу.Вам нужно дождаться события загрузки всплывающего окна.
В Greasemonkey вы должны использовать что-то вроде: PopupWin.addEventListener("load",...)
(что в любом случае является наилучшей практикой, а не onload=...
.)
Аналогично обычномуцикл просто откроет все всплывающие окна одновременно.Чтобы открыть всплывающие окна последовательно, используйте очередь.Поскольку вы уже используете jQuery, переключитесь на версию 1.5.1, чтобы использовать функции очереди jQuery .
Обратите внимание, что Greasemonkey работает с jQuery 1.5.1 начиная с версии GM 0.9.
~~~
Предположим, у вас есть массив всплывающих URL-адресов ...
var URL_Array = [ "http://jsbin.com/omuvu5/#111",
"http://jsbin.com/omuvu5/#222",
"http://jsbin.com/omuvu5/#333"
];
Затем вы можете создать очередь с помощью:
var PopupQueue = $({}); //-- jQuery on an empty object - a perfect queue holder
//--- Load up the queue.
$.each (URL_Array, function (PopupNum, PopupURL) {
PopupQueue.queue ('Popups', function (NextQ_Item) {
OpenPopupFromQueue (NextQ_Item, PopupNum+1, PopupURL);
} );
} );
OpenPopupFromQueue
открываетвсплывающее окно и устанавливает обработчики событий открытия и закрытия ...
function OpenPopupFromQueue (NextQ_Item, PopupNum, PopupURL)
{
var PopupWin = window.open (PopupURL, "_blank");
/*--- Only after the popup has loaded can we do any processing.
See PopupMain() for examples of manipulation via jQuery.
*/
PopupWin.addEventListener (
"load",
function () {
/*--- Setup the listener for when the popup has closed.
We fire the next popup from the queue, there.
*/
PopupWin.addEventListener (
"unload",
function () {
PopupClosed (NextQ_Item);
},
false
);
//--- Now process the popup, as desired.
PopupMain (PopupWin, PopupNum);
},
false
);
}
Обработчик события загрузки показывает, как вы можете манипулировать всплывающим окном с помощью jQuery главной страницы (GM) ...
function PopupMain (PopupWin, PopupNum)
{
//--- This manipulates the main window.
$("#PopupStatus").append ("<li>Popup Loaded.</li>");
//--- This manipulates the popup window.
$("#PayloadTarget", PopupWin.document).prepend ('<h3>This is popup number: ' + PopupNum + '.</h3>');
}
Обработчик события закрытия должен вызывать следующий элемент в очереди ...
function PopupClosed (NextQ_Item)
{
NextQ_Item ();
}
Наконец, вы запускаете очередь с помощью:
PopupQueue.dequeue ('Popups');
Вы можете увидеть демонстрацию, которая собирает все это на jsBin.com .