访问嵌套HTML和BODY标记内的DOM元素

时间:2016-04-27 14:54:32

标签: javascript html iframe

正如评论者所回答的那样,由于跨域安全策略,如果没有访问外部站点,则无法做到这一点。

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
}

0 个答案:

没有答案