Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取Iframe的原始内容_Javascript_Jquery_Html_Xml_Iframe - Fatal编程技术网

Javascript 获取Iframe的原始内容

Javascript 获取Iframe的原始内容,javascript,jquery,html,xml,iframe,Javascript,Jquery,Html,Xml,Iframe,我想使用Jquery或javascript获取Iframe的原始内容(平均每个字符)。这听起来很简单,但我仍在努力寻找正确的方法 但目前它只是Iframe中的一个XML内容。 代码如下: $(function() { var xmlContent = $("#CFrame").contents().find("*").text(); // The magic $('#SResult').xslt({xml: xmlContent, xslUrl: 'styleshee

我想使用Jquery或javascript获取Iframe的原始内容(平均每个字符)。这听起来很简单,但我仍在努力寻找正确的方法

但目前它只是Iframe中的一个XML内容。 代码如下:

$(function() {

    var xmlContent = $("#CFrame").contents().find("*").text();

    // The magic
    $('#SResult').xslt({xml: xmlContent, xslUrl: 'stylesheet/designSS.xsl'});
});
html页面

<form id="searchForm" method="GET" target="ContentFrame" action="http://125.235.8.210:380/search" onSubmit="processContent()">
        .....
    </form>
</div>
<div id="SResult">
</div>
<iframe id="CFrame" name="ContentFrame" frameborder="1" height="2000px" width="1000px" scrolling="no" src="stylesheet/test.xml"></iframe>
</body>

.....

谢谢,

如果您的XML驻留在您的域中,您最好使用AJAX,尤其是使用,它可以为您解析XML并为即时操作做好准备

如果它不在您的域中,则除非

不过,您可以选择:

  • 如果远程服务器的API支持JSONP,请使用它而不是XML。然后,您可以使用jQuery检索JSONP数据或滚动您自己的脚本加载器
  • 或者使用服务器为您代理XML。服务器不限于同一源策略。在服务器上创建一个API,将表单数据中继到远程服务器并检索远程页面—所有这些都与服务器是浏览器一样。然后将结果转发给您

免责声明:我会回答你的问题,不管这是否是解决你问题的优雅方案。约瑟夫似乎认为这是个问题。我认为他这样做可能是正确的

尝试使用mimetype text/xml获取帧是行不通的。浏览器将继续并将XML“翻译”为HTML。这就是为什么听起来不那么简单。这样实际上是不可能的

我将为您介绍一个解决此问题的简单方法

<html>
<head>
<script>
function getXmlContents() {
    /*
    Note: Because of security reasons, the contents of a document can be accessed from another document only if the two documents are located in the same domain.
    http://www.w3schools.com/jsref/prop_frame_contentdocument.asp

    */
    var iframeDocument = document.getElementById('greetingFrame').contentDocument;
    if (iframeDocument == null) 
        return undefined;
    var xmlContainer = iframeDocument.getElementById('xmlContainer');
    if (xmlContainer == null)
        return undefined;
    return xmlContainer.innerText == null ? xmlContainer.textContent : xmlContainer.innerText;
};
</script>
</head>
<body>
<iframe id="greetingFrame" src="helloworld.html" onload="alert(getXmlContents())">
</iframe>
</body>
</html>

函数getXmlContents(){
/*
注意:由于安全原因,只有当两个文档位于同一域中时,才能从另一个文档访问文档的内容。
http://www.w3schools.com/jsref/prop_frame_contentdocument.asp
*/
var iframeDocument=document.getElementById('greetingFrame').contentDocument;
if(iframeDocument==null)
返回未定义;
var xmlContainer=iframeDocument.getElementById('xmlContainer');
if(xmlContainer==null)
返回未定义;
返回xmlContainer.innerText==null?xmlContainer.textContent:xmlContainer.innerText;
};
XML的内容被包装在一个HTML(helloworld.HTML)中:


你好,世界
我已经在Chrome、Firefox和IE中成功地测试了这一点


当然,您必须将XML文档包装在HTML脚本标记中,如上所述。例如,如果您希望呈现XML,也可以将XML包装在不同的标记中,但必须使用html编码对XML进行编码。这需要在服务器端完成。一个非常简单的(php/ruby/python/etc)脚本就足够了

您的iframe是指向存储在域中的内容,还是指向某个远程网站?另外,为什么要将XML文档加载到iframe中?有一个表单(发送到远程应用程序)以该iframe为目标,表单的返回内容应该是XML。然后,我将使用一个样式表将这个xml转换为包含在主页div中的html。不支持JSONP,在服务器端进行更改也是不可能的。是否有一种方法可以将表单目标设置为div或Iframe以外的其他内容。这可能有助于避免跨域规则?@MikeNQ JSONP通常是解决方法。除此之外,你就不走运了。服务器代理最适合此作业。
<html>
<body>
<script id="xmlContainer" type="text/xml">
  <?xml version="1.0" encoding="UTF-8"?>
  <title>
    Hello world
  </title>
</script>
</body>
</html>