访问iFrame(Google表单)中的文本输入 - Javascript

时间:2011-07-21 16:30:23

标签: javascript iframe

切入追逐:

我有Google表单调查,基本上我需要动态编辑其中一个文本输入。

Forms调查实际上是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 :(得分:0)

iframe很不寻常,因为它“生活”在浏览器javascript heirarchy中的两个位置。 它是window.frames集合的一部分,因为它是一种框架,它也是文档树的一部分,因为它是一个元素。您可以使用以下行访问元素iframe,然后使用它执行您想要的操作。

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

如果文档中没有其他iframe,则x为0。

答案 1 :(得分:0)

您看到Same Origin Policy正在行动中。

在网络上,一个网站上的内容mostly不允许与另一个网站上的内容进行互动。

由于iframehttps://spreadsheets.google.com加载而且(我猜是)您的网页位于其他网站(例如http://example.com/),因此您的JavaScript无法在iframe内看到任何内容{1}}(Google的JavaScript在您的网页上看不到任何内容)。

为什么呢?同源政策旨在保护您。没有它,我可以将google.com加载到我网站上的iframe,并使用JavaScript读取您的电子邮件地址(如果您已登录)。或者,我可以加载facebook.com并从页面中读取您的姓名和相当多的其他个人信息。