Я пытаюсь улучшить графический интерфейс одного из наших инструментов, но у меня ничего не получается. Пользовательский интерфейс состоит из тела с несколькими iFrames, из которых я хочу выбрать один и немного изменить содержимое.
Проблема в том, что при использовании моего селектора frame = $("iframe[src*='/vs/virt.jsp']");
похоже, что он не может найти элемент.
Вот код (не делает ничего, кроме журнала):
// ==UserScript==
// @name UI Tweaks
// @version 0.2
// @description Does stuff
// @match https://*.local/vs/*
// @run-at document-end
// @grant none
// @require http://code.jquery.com/jquery-latest.js
// ==/UserScript==
console.log(window.location);
console.log("before");
console.log($());
frame = $("iframe[src*='/vs/virt.jsp']");
console.log(frame.attr("id"));
console.log("after");
При запуске этого на странице я получаю две загрузки страницы, и он показывает объект местоположения до и после. Но объект фрейма совершенно пуст.
Однако при запуске того же самого в консоли разработчика Chrome после загрузки страницы я получаю искомые элементы.
Я пробовал разные способы загрузки скрипта только после загрузки страницы и т. Д., Но он все еще не работает.
Обновлять:
Я добавил:
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
Затем попробовал это:
waitForKeyElements (
"iframe[src*='/vs/virt.jsp']",
test()
);
function test(){
frame = $("iframe[src*='/vs/virt.jsp']");
console.log(frame.attr("id"));
}
Все тот же результат. Стоит отметить, что я использую Tampermonkey, но, возможно, это то же самое?
Редактировать 2:
function timer() {
frame = $("iframe[src*='/vs/virt.jsp']");
console.log(frame.attr("id"));
setTimeout(timer, 1000);
}
timer();
Он продолжает выводить «undefined», тогда как, если я попробую это в консоли разработчика Chrome, я получу объект. Это как Tampermonkey не имеет доступа?
$("iframe[iframe[src*='/vs/virt.jsp']");
это опечатка в вопросе, верно, это не настоящий код? - person Jaromanda X   schedule 15.10.2015waitForKeyElements
илиMutationObserver
. - person wOxxOm   schedule 15.10.2015test()
в вашем новом коде — это не обратный вызов, а немедленный вызов функции вызов. Удалите()
. Кроме того, с@grant none
скрипт запускается в контексте веб-страницы, поэтому у вас могут быть две конфликтующие библиотеки jQuery, если веб-страница использует свою собственную. Удалить@grant none
. И переработайте код, чтобы использовать@grant unsafeWindow
, но только при необходимости. - person wOxxOm   schedule 16.10.2015