2014-02-19 71 views
0

我正在使用一個在線應用程序,我無法訪問源代碼,但是我可以通過iframe注入javascript,因爲我可以在同一個域中創建頁面。是否可以使用Blob替換文件輸入?

此應用程序有它提交的文件上傳表單和文件輸入,認爲:

<form> 
    <!-- lots and lots of inputs --> 
    <input type="file" name="blah"> 
</form> 

我想用這種形式提交的JavaScript斑點爲這個特殊的文件,而不是從磁盤上的文件,而不會干擾其餘的形式。我該怎麼做呢?

+1

您可以使用XHR2(阿賈克斯)要做到這一點,特別是與FORMDATA。 – Musa

+0

使用隱藏的輸入w/base64文件數據,需要在服務器上自定義處理。 – dandavis

+0

這聽起來像我希望的解決方案,但我沒有訪問服務器端代碼。我被困在可怕的內容管理系統中。 – user2867288

回答

2

這是可能使用XMLHttpRequest的新特性和FormData

感謝@musa他的評論;-)

考慮這個(未經測試)例如:

function sendFile() { 
    var content = "<hello>world</hello>"; // set here the content of your file 
    var blob = new Blob([content], { type: "text/xml"}); // set the type of content (eg: image/jpeg) 

    var formData = new FormData(); 
    formData.append('blah', blob); 

    var xhr = new XMLHttpRequest(); 
    xhr.open('POST', '/server', true); 
    xhr.onload = function(e) { 
    alert ('successfully (or not) sent'); 
    }; 

    xhr.send(formData); 
} 

更多信息:

注意:FormData is not supported by IE9 (and less)

這是同爲Blob

+0

我試過使用FormData和模擬POST數據,我正在修改的頁面上Dojo代碼大的不可讀Blob發送到服務器,但無濟於事。我希望簡單地修改頁面上的html元素,並讓Dojo代碼接管並完成它的工作。如果這是一個個人項目,我已經組織了一切,並在我的控制下,這將是一個很好的解決方案。 – user2867288

+0

也感謝您輸入這樣一個有組織的職位。 – user2867288

相關問題