Я пишу диагностический (greasemonkey) скрипт для очень конкретной цели, поэтому я понимаю, что он может выглядеть странно.Чего я хочу добиться, так это отображать информацию js и css во всплывающем окне на странице, чтобы на ней отображались детали, которые я затем могу использовать для устранения неполадок / диагностики «наших» продуктов.
Следующая функция является частьюэтот сценарий, и он создает строку (msg), которая будет отображаться во всплывающем окне после диагностики всех файлов.Это работает нормально.
Что я не понимаю, так это то, что ближе к концу кода я могу «предупредить» значение (в данном случае строку, содержащую «Version»), но я не могудобавьте то же значение в строку сообщения, которое будет выводиться позже (и будет отображаться, включая закрытие).
// get linked stylesheets
links = document.getElementsByTagName('link');
msg += '<h2>External Stylesheets</h2>';
for (var j in links) {
if (links[j].rel == "stylesheet") {
msg += "<div class='css" + [j] + "'>Stylesheet: " + "<a href=" + links[j].href + ">" + links[j].href + "</a>";
var styleSheet = links[j].href;
jQuery.get(links[j].href, function(data) {
lines = data.split("\n");
for (var k in lines) {
if ((lines[k]).search(/Version/) != -1) {
alert (lines[k]);
msg += " - " + lines[k];
break;
}
}
});
msg += "</div>";
}
}
Надеюсь, я дал понять, у меня есть фон для кодирования, но довольно новыйс тонкостями Javascript / jQuery (которые я добавил в смесь).
Отредактировано: добавлено решение.
Асинхронные комментарии Ajax приводят меня к решению (через документ jQuery для jQuery.ajaxSetup ), спасибо всем за ваш вклад, я многому научился.
Сначала я попробовал:
jQuery.ajax({
url: links[j].href,
success: function(data) {
lines = data.split("\n");
for (var k in lines) {
if ((lines[k]).search(/Version/) != -1) {
msg += " - " + lines[k];
break;
}
}
},
asynch: false
});
, который по какой-то причинетоже не сработало, поэтому я вернулся к исходному коду (используя jQuery.get), но добавил следующую строку в начале скрипта:
jQuery.ajaxSetup({async:false});
и теперь он работает, как и ожидалось, с кодом Iуже было.