正如评论者所回答的那样,由于跨域安全策略,如果没有访问外部站点,则无法做到这一点。
IframeModify.js:8 Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "https://MYDOMAIN" from accessing a frame with origin "https://EXTERNALDOMAIN". Protocols, domains, and ports must match.
我正在用PHP和javascript编写一个Web应用程序。该网页从第三方来源提取IFrame。我们无法控制iframe中的内容,也无法对其进行修改。
注意:我无法使用JQUERY,此处的解决方案对我不起作用,因此请不要将其标记为重复:Accessing Elements Inside iframe and body Tags with JavaScript
我只是想删除那些出现在IFrame中的HTML元素。
当iframe加载并尝试按类名获取这些元素时,我会调用一段javascript。该脚本在加载IFrame之后运行,所以我知道这不是问题所在。我也用长计时器对它进行了测试,只是为了确保时间不是加载元素之前的问题。
我认为问题是因为IFrame包含自己的HTML和BODY标签。
因此,当我尝试使用document.getElementsByClassName(" help-url")时,它只能访问第一个HTML标记中的元素。我确信这是因为我测试了它并且能够访问OUTER HTML标记中的元素,但是当尝试访问嵌套HTML标记内的任何内容时,x.length返回了零元素。
如何访问该iframe中的嵌套元素?
以下是嵌套HTML和Body标记的基本结构。
<html>
<head>
</head>
<body>
<div>
<!-- some of my content -->
<iframe onload="rmvLink()"> <!-- this is the external iframe -->
<html>
<head>...</head>
<body>
</body>
</html>
</iframe>
</div>
</body>
</html>
这是javascript,包括计时器,所以我们知道它不是时间问题。
function rmvLink() {
document.getElementsByTagName('iframe')[0].onload = function() {
alert('loaded');
setTimeout(rmv, 3000);
}
function rmv() {
var duoIframeLinks = document.getElementsByClassName("help-url");
alert(duoIframeLinks.length); //returns 0
}