iframe文件上传或jquery正在转义我的字符串

时间:2013-11-12 10:58:41

标签: jquery iframe escaping

我正在编写一个javascript& jquery-backend并使用iframe文件上传的标准ajax meme。

我们需要对服务器返回的字符串使用javascript eval()(是的,我知道)。 字符串可能是这样的(但并不总是如此,我们需要eval):

$("#uploaderCinfo").html("<h1>file(s) received</h1>");

服务器,firebug,fiddler告诉我,这正是它发送的内容(加上http-header):

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 54

$("#uploaderCinfo").html("<h1>file(s) received</h1>");

然而我从iframe获得的是:

<pre>$("#uploaderCinfo").html("&lt;h1&gt;file(s) received&lt;/h1&gt;");</pre>

我认为添加<pre>'s的原因很充分,我可以使用slice()将其删除。但是html-string中的转义来自哪里?

这种方式将 <h1>file(s) received</h1> 逐字添加到页面中,因为&lt; s以某种方式被转义。 我可以阻止转义,还是必须使用javascript-means来还原它?

感谢您的帮助。

供参考:之后的最小可用来源: (注意:单引号转义为生成会话的Smalltalk)

self plain: '<div id="uploadform',uUpload,'">
    <form id="theuploadform',uUpload,'" method="post" action="">
        <input id="userfile',uUpload,'" name="userfile',uUpload,'" 
            size="10" type="file" multiple />
        <input id="formsubmit',uUpload,'" type="submit" value="upload" 
            onClick="', INSIDE THE ONCLICK (see below) ,'" />
    </form>
<span id="anim',uUpload,'">
</span>
<div id="iframe',uUpload,'" style="width: 0px; height: 0px; display: none;">

INSIDE THE ONCLICK:

$("#anim',uUpload,'").html("<img src=''/files/public/loading.gif'' />");
var iframe = $(''<iframe name="postiframe',uUpload,'" 
        id="postiframe',uUpload,'" style="display: none" />'');
    $("body").append(iframe);
    var form = $("#theuploadform',uUpload,'");
    form.attr("action", "/uploadAjax?session=',
        (session at: #zId),'&upload=',uUpload,'");
    form.attr("method", "post");
    form.attr("target", "postiframe',uUpload,'");
    form.attr("enctype", "multipart/form-data");
    form.attr("file", $("#userfile',uUpload,'").val());
    form.submit();
    $("#postiframe',uUpload,'").load(function () {
        iframeContents = 
            $("#postiframe',uUpload,'")[0].contentWindow.document
                                                    .body.innerHTML;
        $("#anim',uUpload,'").html(""); /*removes animation*/
    console.log("A");
    console.log(iframeContents);
    console.log("B");
    iframeContents = iframeContents.slice(5, iframeContents.length-6);
    console.log(iframeContents);
    console.log("C");
    eval(iframeContents);
    console.log("D");
    });
    return false;

2 个答案:

答案 0 :(得分:1)

我认为这确实不是服务器逃脱它而是你的浏览器。它添加了<pre>,因为它的内容是text / plain(就像已建议的@Pinal)。

我对你使用FF是对的吗? (编辑:我刚刚在此处找到了错误报告:https://bugzilla.mozilla.org/show_bug.cgi?id=674186

从iframe中检索内容时,请尝试使用.textContent而不是innerHTML。

另请参阅http://www.quirksmode.org/dom/w3c_html.html#t07,建议使用var text = x.innerText || x.textContent以获得浏览器兼容性。

答案 1 :(得分:0)

这是服务器端的转义。你的后端是什么?