在Iframe中处理内容

时间:2018-04-09 17:16:19

标签: javascript jquery iframe

我希望从包含iframe的网站获取内容,并且我在这里使用basysmith的回答(https://stackoverflow.com/a/3127056/8177490)来获取内容,以便我可以从我的域中提供iframe。

我想只显示某个div,让我们把它称为" table-wrap"从页面中隐藏iframe中的其他所有内容。

我已经尝试了几乎关于这个主题的每一个答案,但似乎没有任何效果。 当我使用这个

var iframeDoc = document.getElementById('iframeid').contentWindow; 
jQuery(iframeDoc).find('body > not:#table-wrap').hide();
jQuery(iframeDoc).find('#table-wrap').appendTo('body');

在控制台中。

我仍然收到错误,虽然它是通过我的域名脚本提供的:

VM4380:66 Uncaught DOMException: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "https://mydomain.de" from accessing a cross-origin frame.
at HTMLIFrameElement.contentDocumentDesc.get [as contentDocument] (<anonymous>:66:14)
at contents (https://mydomain.de/wp-includes/js/jquery/jquery.js?ver=1.12.4:2:26888)
at Function.map (https://mydomain.de/wp-includes/js/jquery/jquery.js?ver=1.12.4:2:3613)
at a.fn.init.n.fn.(anonymous function) [as contents] (https://mydomain.de/wp-includes/js/jquery/jquery.js?ver=1.12.4:2:27001)
at <anonymous>:1:18

我也尝试过使用iframe.onload和

的不同方法
jQuery("#iframeID").ready(function () { 
  jQuery('#iframeid > :not(#table-wrap)').hide(); 
  jQuery('#table-wrap').appendTo('body');
});

但似乎没有任何效果。

有没有人知道如何才能让它发挥作用? 我会很感激。

1 个答案:

答案 0 :(得分:0)

从(https://mydomain.de)拉jQuery的位置是否与外部页面和内部iFrame页面相同?

由于实际访问iFrame内容的任务属于您的示例中的jQuery,因此您需要验证所有域(包括jQuery脚本本身)是否匹配以避免跨域错误。

取决于你想要做什么,window.postMessage可能是一个更好的解决方案,因为它绕过了很多域和安全问题(假设你拥有外页和内页),甚至只是一个直接的ajax请求在页面和服务器之间(因此完全避免了iFrame)。