JavaScript-从iframe访问元素

JavaScript-从iframe访问元素,javascript,iframe,cross-domain,Javascript,Iframe,Cross Domain,我知道有一些不同的问题,比如这个问题,但我在尝试实现它们的解决方案时遇到了一些问题 我有两个html页面。第一个页面有一个包含第二个页面的iframe。我希望第一页能够通过iframe从第二页获取textarea的值 问题来了。这两个文件都在我的计算机上的同一目录中,但我收到以下错误:Uncaught DOMException:阻止原点为“null”的帧访问跨原点帧。 JavaScript: window.onload = function(){ var f = document.get

我知道有一些不同的问题,比如这个问题,但我在尝试实现它们的解决方案时遇到了一些问题

我有两个
html
页面。第一个页面有一个包含第二个页面的
iframe
。我希望第一页能够通过
iframe
从第二页获取textarea的值

问题来了。这两个文件都在我的计算机上的同一目录中,但我收到以下错误:
Uncaught DOMException:阻止原点为“null”的帧访问跨原点帧。

JavaScript:

window.onload = function(){
    var f = document.getElementById("text-box-iframe").contentWindow;
    var innerDoc = f.contentDocument || f.contentWindow.document;
}
HTML:

请不要推荐任何插件或库。我希望这个答案是JavaScript/HTML(没有jQuery),我不想使用
postMessage
在页面之间进行通信。我几乎100%确信这种方法会奏效,我只是需要一些帮助才能让它发挥作用


提前感谢。

内部框架和父框架都应该来自同一个域。否则,浏览器将不允许您访问子框架的元素


它是安全性的一部分。

内部框架和父框架都应该来自同一个域。否则,浏览器将不允许您访问子框架的元素


它是安全性的一部分。

出于安全原因,对
文件://
帧的所有操作都被视为交叉原点。简而言之,在显示本地文件时不能执行跨帧操作——如果需要,请设置web服务器


(如果您好奇:这是为了防止您打开的恶意HTML文件读取计算机上其他文件的内容。)

出于安全原因,对
文件://
帧的所有操作都被视为跨源操作。简而言之,在显示本地文件时不能执行跨帧操作——如果需要,请设置web服务器

(如果您好奇:这是为了防止您打开的恶意HTML文件读取计算机上其他文件的内容。)

应该是这样的

window.onload = function() {
  var f = document.getElementById("text-box-iframe");
  var innerDoc = (f.contentWindow || f.contentDocument);
  console.log(innerDoc)
  console.log(innerDoc.document.getElementById('text-box').value)
}
应该是这样的

window.onload = function() {
  var f = document.getElementById("text-box-iframe");
  var innerDoc = (f.contentWindow || f.contentDocument);
  console.log(innerDoc)
  console.log(innerDoc.document.getElementById('text-box').value)
}


你看到问题了吗?参考这个和这个
窗口。当主页加载时,onload
会启动,也许iframe还没有加载?没有@JaromandaX,他似乎必须启用跨源请求。没有,他没有,两个文件都在我计算机上的同一个目录中-这是“同一个源”。。。除非他在文件中使用Chrome:///协议(不是http或https),否则您看到问题了吗?请参考此和此
窗口。当主页加载时,onload
会启动,可能iframe尚未加载?否@JaromandaX,似乎他必须启用跨源请求。不,他没有,两个文件都在我计算机上的同一目录中-这就是“同源”…除非他使用Chrome和file:///协议(不是http或https)我已经知道了。我不明白他们怎么不在同一个域中。他们在同一个文件夹中!你是直接在浏览器中打开文件还是通过本地服务器加载的?@Jordan,如果是同一个域,你可能会这样做。但我真的不明白你为什么在可能的时候使用iFrame来惩罚自己向你需要的页面发送AJAX请求。我已经知道了。我不明白它们为什么不在同一个域中。它们在同一个文件夹中!你是直接在浏览器中打开文件还是通过本地服务器加载的?@Jordan,如果是同一个域,你可能会这样做。不过我不明白你为什么要用当你可以向你需要的页面发出AJAX请求时,使用iframes。是的,这就是我在评论中所说的。@Dashwuff这可能就是我要找的!我必须尝试一下确保。
文件://框架上的所有操作都被视为跨源操作。
…在Chrome中…Firefox不会遭受这种令人憎恶的影响。事实上,Firefox,Edge、Internet Explorer(未检查Opera或Safari)不要将访问
文件://
视为跨源-只有Chrum可以这样做(使用命令行
--允许从文件访问文件
,使Chrum不那么愚蠢)是的,这就是我在评论中所说的。@Dashwuff这可能就是我要找的!我必须尝试一下以确定。
文件://框架上的所有操作都被视为跨源操作。
…在Chrome中……Firefox不会遭受这种可怕的痛苦事实上,Firefox、Edge、Internet Explorer(没有检查Opera或Safari)不要将
文件://
访问
文件://
视为交叉源-只有Chrum会这样做(使用命令行
--允许从文件访问文件,使Chrum不那么愚蠢)根本不解决交叉源错误:p根本不解决交叉源错误:p
window.onload = function() {
  var f = document.getElementById("text-box-iframe");
  var innerDoc = (f.contentWindow || f.contentDocument);
  console.log(innerDoc)
  console.log(innerDoc.document.getElementById('text-box').value)
}