代码之家  ›  专栏  ›  技术社区  ›  acme

如何使用javascript将XML发布到iframe

  •  1
  • acme  · 技术社区  · 15 年前

    基本上,我想将XML(内容类型为text/xml)发布到一个URL,并直接在浏览器中显示输出。这必须在iframe中完成。

    是否可以将XML发布到iframe?换句话说,可以将post请求的内容类型更改为text/xml吗?必要时还提供PHP4。

    iframe操作的URL必须保留,因为结果包含一个带有相对链接的HTML页…

    1 回复  |  直到 15 年前
        1
  •  2
  •   bobince    15 年前

    过去可能 document.open(mimetype) 在Netscape中的iframe上,但是现代浏览器不支持这个(而且Netscape也不支持XML)。

    在许多浏览器中,可以设置iframe src 到A data URI 例如: data:text/xml,%3Celement%3Ehello%3C/element%3E ,只要文档不太长。但这在IE中不起作用。因此,您至少需要一个返回服务器的备份计划:

    <?php
        header('Content-Type: text/xml');
        echo($_REQUEST('xml'));
    ?>
    

    然后,如果XML足够短以适合于URI,则可以通过以下方式设置其SRC:

    iframe.src= 'http://www.example.com/echoxml.php?xml='+encodeURIComponent(xml);
    

    如果XML可能很长,则需要使用POST请求,这意味着表单提交:

    var idoc= iframe.contentDocument || iframe.contentWindow.document; // IE compat
    idoc.open();
    idoc.write('<form method="post" action="http://www.example.com/echoxml.php">');
    idoc.write('    <textarea name="xml"></textarea>');
    idoc.write('</form>');
    idoc.close();
    idoc.getElementsByTagName('textarea')[0].value= xml;
    idoc.getElementsByTagName('form')[0].submit();
    

    这一切值得吗?除非您使用XSL,否则在大多数浏览器中使用的非样式化XML视图可能会非常差。在完全不显示XML的较旧/较简单的浏览器中,系统会提示您下载XML文件。

    允许任何人向您的安全上下文中注入任何XML内容都是危险的。如果他们制作了一个包含XHTML脚本内容的返回文档,那么您就容易受到跨站点脚本攻击。