#javascript #iframe #var
#javascript #iframe #var
Вопрос:
У меня есть файл .js, который запускается на странице и взаимодействует с уже имеющимися там данными. Этот файл .js создает iframe, который загружает другую страницу, на которой также установлен файл .js (оба с помощью GreaseMonkey). Я пытаюсь заставить файл .js, запущенный в iframe, захватить переменную с родительской страницы. Оба находятся в одном домене, но он не будет обращаться к данным. Вот что у меня есть:
js1:
var myvar1 = document.getElementsByName('nameofinputfromparentpage')[0].value;
js2:
var myvar2 = parent.document.getElementsByID('page1').getElementsByName('nameofinputfromparentpage')[0].value;
или
var myvar2 = myvar1 (or parent.myvar1 or window.myvar1 or a dozen other variances...)
Я попытался перенести переменную из js1 в js2 с помощью чего-то вроде:
window.frames[iframeName].variableName
или с помощью contentDocument
/ contentWindow
.
Кажется, я просто не могу правильно подобрать синтаксис, чтобы заставить его фактически извлекать данные…
Итак … источник страницы родительской страницы имеет поле ввода, как мне получить доступ к этой информации в .js, запущенном в iframe другого .js на родительской странице? Спасибо всем за вашу помощь! 🙂
Комментарии:
1. вы получили свой ответ? Смотрите мой последний комментарий. Не комбинируйте get по имени и get по идентификатору, просто используйте по одному за раз!
Ответ №1:
Внутри IFrame родительское свойство ссылается на родительское, поэтому:
parent.document.getElementByID('myInputBox').value;
получит доступ к содержимому элемента с идентификатором ‘myInputBox’, расположенного в родительском элементе этого документа. В случае, если скрипт выполняется из документа верхнего уровня вне объекта фрейма, свойство parent=self . Пожалуйста, обратите внимание, что свойство ID должно быть уникальным в пределах одного HTML-документа, поэтому функция getElementById() не getElementsByID() . Также нет необходимости в индексе, потому что будет возвращен только один элемент.
Комментарии:
1. Прошу прощения, у меня есть это как getElementById в моем коде; У меня просто была опечатка в моем вопросе. Проблема в том, что содержимое, с которым я работаю, не все имеет идентификаторы; большая часть из них была написана только с именами (не мной!) — Следовательно, для всего приходится использовать getElementsByName … Должно ли это быть только с идентификатором? Что касается кода, то это то, что у меня есть (плюс дополнение getname), но оно вообще не извлекает информацию. Даже наличие предупреждения с ним останавливает загрузку остальной части скрипта: alert (parent.document.getElementsByName(‘name’)[0].value); Может ли это быть проблемой с запуском .js из .js?
2. Нет, родительское свойство вашего фрейма — это то, что вам нужно. Возможно, проблема с Internet Explorer (проклятие моего существования). Как насчет доступа по имени тега? Мне просто нравится ID, потому что они уникальны. Имена и теги возвращаются в виде массивов, поэтому используйте индекс.
3. Я только что понял, что вы используете имя и идентификатор одновременно! Просто используйте один. Нет добавления. Это ваша проблема!