切入追逐:
我有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";
}
任何想法出了什么问题? 谢谢你们。
答案 0 :(得分:0)
iframe很不寻常,因为它“生活”在浏览器javascript heirarchy中的两个位置。 它是window.frames集合的一部分,因为它是一种框架,它也是文档树的一部分,因为它是一个元素。您可以使用以下行访问元素iframe,然后使用它执行您想要的操作。
window.frames[x].document.getelementById('')
如果文档中没有其他iframe,则x为0。
答案 1 :(得分:0)
您看到Same Origin Policy正在行动中。
在网络上,一个网站上的内容mostly不允许与另一个网站上的内容进行互动。
由于iframe
从https://spreadsheets.google.com
加载而且(我猜是)您的网页位于其他网站(例如http://example.com/
),因此您的JavaScript无法在iframe
内看到任何内容{1}}(Google的JavaScript在您的网页上看不到任何内容)。
为什么呢?同源政策旨在保护您。没有它,我可以将google.com
加载到我网站上的iframe
,并使用JavaScript读取您的电子邮件地址(如果您已登录)。或者,我可以加载facebook.com
并从页面中读取您的姓名和相当多的其他个人信息。