获取Iframe的原始内容

时间:2013-01-06 10:47:15

标签: javascript jquery html xml iframe

我想使用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>

谢谢,

2 个答案:

答案 0 :(得分:1)

免责声明:我会回答您的问题,无论它是否真的是您问题的优雅解决方案。约瑟夫似乎把这当作问题。我会说他可能是这样做的。

尝试使用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>

XML的内容包含在HTML(helloworld.html)中:

<html>
<body>
<script id="xmlContainer" type="text/xml">
  <?xml version="1.0" encoding="UTF-8"?>
  <title>
    Hello world
  </title>
</script>
</body>
</html>

我已经在Chrome,Firefox和IE中成功测试了这个。

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

答案 1 :(得分:0)

如果您的XML位于您的域中,那么您最好使用AJAX,尤其是使用jQuery library,它会为您解析它并为即时操作做好准备。

如果它不在您的域中,那么you can't access it via AJAX除非远程server and your client's browser both support CORS.

你有选择:

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