0

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

谢谢,

4

2 回答 2

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 也可以包装在不同的标记中,例如,如果您希望它呈现,但您必须使用 html 编码对 XML 进行编码。这需要在服务器端完成。一个非常简单的(php/ruby/python/etc)脚本就足够了。

于 2013-01-06T12:33:42.480 回答
0

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

如果它不在您的域中,那么您将无法通过 AJAX 访问它,除非远程服务器和您的客户端浏览器都支持 CORS。

不过,您有以下选择:

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