Доступ к текстовому вводу внутри iFrame (Google Forms) - Javascript - PullRequest
0 голосов
/ 21 июля 2011

Резка до погони:

У меня есть опрос Google Forms, и в основном мне нужно динамически редактировать один из его текстовых вводов.

На самом деле опрос Forms - это 1 из 6 возможных опросов, поэтому Javascript добавляет его: '<iframe name="survey" id="ifrm" src="https://spreadsheets.google.com/spreadsheet/embeddedform?formkey=dHpYM1NvTFN4OElNWnBJWUtjdHhld2c6MQ" width="760" height="623" frameborder="0" marginheight="0" marginwidth="0">Loading...</iframe>'

Проблема в доступе к этому текстовому полю - я использовал setTimeout(), чтобы дождаться, пока iFrame будет загружен правильно. И тогда я хочу сделать это:

function writeEncoded() {
        alert("now attempting to inject");


        var iF = document.getElementById('ifrm');
        alert( iF); 

        //works up to here
        var form = iF.contentWindow.document; //does not run.
        alert (form);
        form.getElementById('entry_3').value = "Hi";

    }

Есть идеи, что не так? Спасибо, ребята.

Ответы [ 2 ]

0 голосов
/ 21 июля 2011

Вы видите Та же политика происхождения в действии.

В Интернете контент на одном веб-сайте в основном не разрешен для взаимодействия с контентом на другом.

Поскольку iframe загружается с https://spreadsheets.google.com и (я предполагаю) ваша веб-страница находится на другом сайте (например, http://example.com/), ваш JavaScript не может ничего видеть внутри iframe (и JavaScript от Google ничего не вижу на вашей веб-странице).

Почему? Та же политика происхождения предназначена для защиты вас. Без него я мог бы загрузить google.com в iframe на моем веб-сайте и с помощью JavaScript прочитать ваш адрес электронной почты (если вы вошли в систему). Или я мог бы загрузить facebook.com и прочитать ваше имя и совсем немного другой личной информации со страницы.

0 голосов
/ 21 июля 2011

iframe необычен тем, что он «живет» в двух местах в браузерной иерархии javascript. Это часть коллекции window.frames, потому что это своего рода фрейм, а также часть дерева документа, потому что это элемент. Вы можете использовать следующую строку для доступа к элементу iframe, а затем делать с ним то, что хотите.

window.frames[x].document.getelementById('')

с x равным 0, если в документе нет других фреймов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...