JavaScript - 从 iframe 访问元素
JavaScript - Accessing elements from an iframe
我知道有几个与此类似的不同问题,但我在尝试实施他们的解决方案时遇到了一些问题。
我有 2 html
页。第一个有一个包含第二页的 iframe
。我希望第一页能够通过 iframe
.
从第二页获取文本区域的值
问题来了。这两个文件都在我计算机上的同一目录中,但出现此错误:Uncaught DOMException: Blocked a frame with origin "null" from accessing a cross-origin frame.
JavaScript:
window.onload = function(){
var f = document.getElementById("text-box-iframe").contentWindow;
var innerDoc = f.contentDocument || f.contentWindow.document;
}
HTML:
<iframe id="text-box-iframe" src="text-box.html"></iframe>
所以这是我的两个问题:为什么这段代码无法访问 iframe
的页面(第 2 页),我该怎么做才能解决这个问题?
IDK 如果这有帮助,但这是第二页的代码:
<textarea id="text-box"></texarea>
请不要推荐任何插件或库。我想要JavaScript/HTML中的这个答案(没有jQuery),我不想使用postMessage
在页面之间进行通信。我几乎 100% 确定此方法会奏效,我只需要一些帮助即可使其奏效。
提前致谢。
内部框架和父框架,都应该来自同一个域。否则浏览器将不允许您访问子框架的元素。
它是安全的一部分。
出于安全原因,对 file://
帧的所有操作都被视为跨域操作。简而言之,在显示本地文件时不能进行跨帧操作——如果需要的话,请架设一个网络服务器。
(如果您好奇:这是为了防止您打开的恶意 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)
}
我知道有几个与此类似的不同问题,但我在尝试实施他们的解决方案时遇到了一些问题。
我有 2 html
页。第一个有一个包含第二页的 iframe
。我希望第一页能够通过 iframe
.
问题来了。这两个文件都在我计算机上的同一目录中,但出现此错误:Uncaught DOMException: Blocked a frame with origin "null" from accessing a cross-origin frame.
JavaScript:
window.onload = function(){
var f = document.getElementById("text-box-iframe").contentWindow;
var innerDoc = f.contentDocument || f.contentWindow.document;
}
HTML:
<iframe id="text-box-iframe" src="text-box.html"></iframe>
所以这是我的两个问题:为什么这段代码无法访问 iframe
的页面(第 2 页),我该怎么做才能解决这个问题?
IDK 如果这有帮助,但这是第二页的代码:
<textarea id="text-box"></texarea>
请不要推荐任何插件或库。我想要JavaScript/HTML中的这个答案(没有jQuery),我不想使用postMessage
在页面之间进行通信。我几乎 100% 确定此方法会奏效,我只需要一些帮助即可使其奏效。
提前致谢。
内部框架和父框架,都应该来自同一个域。否则浏览器将不允许您访问子框架的元素。
它是安全的一部分。
出于安全原因,对 file://
帧的所有操作都被视为跨域操作。简而言之,在显示本地文件时不能进行跨帧操作——如果需要的话,请架设一个网络服务器。
(如果您好奇:这是为了防止您打开的恶意 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)
}