[英]“SCRIPT5 Access is denied” error on IE9 when firing .click() from onchange
我們希望減少用戶在我們的網站上上傳文件所需的步驟; 因此,我們使用jQuery通過以下標記(簡化)打開和回發文件:
<a onclick="$('#uplRegistrationImage').click();">
Change profile picture
</a>
<!-- Hidden to keep the UI clean -->
<asp:FileUpload ID="uplRegistrationImage"
runat="server"
ClientIDMode="static"
Style="display:none"
onchange="$('#btnSubmitImage').click();" />
<asp:Button runat="server"
ID="btnSubmitImage"
ClientIDMode="static"
Style="display:none"
OnClick="btnSubmitImage_OnClick"
UseSubmitBehavior="False" />
這在Firefox和Chrome中絕對可以正常工作; 單擊鏈接時打開文件對話框,並在選擇文件時觸發回發。
但是,在IE9中,在加載文件上傳並且用戶選擇了文件之后; 受到OnChange工作的影響,我收到“ SCRIPT5訪問被拒絕”錯誤。 我嘗試設置任意超時,設置間隔以檢查文件是否無效。
與此相關的還有許多其他問題。 但是,似乎沒有一個好的答案(有人說將文件對話框設置為透明並懸停在按鈕后面!)
還有其他人解決嗎? 還是絕對有必要為IE用戶提供一個按鈕?
出於安全原因,您嘗試執行的操作是不可能的。 似乎是IE9不允許您以這種方式提交表單,除非它是實際單擊鼠標觸發它的文件上載控件。
出於參數的考慮,我能夠使用您的代碼在change
處理程序中進行提交,但是僅當我自己單擊“ Browse
按鈕時,該方法才有效 。 我什至在$(document).ready
方法中為change
處理程序設置的變量設置了輪詢,該變量指示應觸發提交-這也不起作用。
該問題的解決方案似乎是:
樣式文件上傳:
http://www.quirksmode.org/dom/inputfile.html
http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom
參考文獻:
嘿,這個解決方案有效。 下載,我們應該使用MSBLOB
$scope.getSingleInvoicePDF = function(invoiceNumberEntity) {
var fileName = invoiceNumberEntity + ".pdf";
var pdfDownload = document.createElement("a");
document.body.appendChild(pdfDownload);
AngularWebService.getFileWithSuffix("ezbillpdfget",invoiceNumberEntity,"pdf" ).then(function(returnedJSON) {
var fileBlob = new Blob([returnedJSON.data], {type: 'application/pdf'});
if (navigator.appVersion.toString().indexOf('.NET') > 0) { // for IE browser
window.navigator.msSaveBlob(fileBlob, fileName);
} else { // for other browsers
var fileURL = window.URL.createObjectURL(fileBlob);
pdfDownload.href = fileURL;
pdfDownload.download = fileName;
pdfDownload.click();
}
});
};
此解決方案看起來可能有效。 您必須將其包裝在<form>
然后將其發布到jquery更改處理程序中,並可能使用__eventtarget或iframe或Web窗體使用的任何形式在form_load中進行處理,但是您可以選擇一個文件,並通過提交表單將其發送。 但是我無法對其進行測試,因為我沒有在家中設置環境。
<a onclick="$('#inputFile').click();">
Change profile picture
</a>
<div id='divHide'>
<input id='inputFile' type='file' />
</div>
$('#inputFile').change(function() { alert('ran'); });
#divHide { display:none; }
好吧,就像SLC所說的那樣,您應該使用<Form>
標記。
首先,您應該指出文件數量; 這應由您的輸入字段確定。 第二步是將它們堆疊到一個數組中。
<input type="file" class="upload" name="fileX[]"/>
然后創建一個循環; 通過循環,它將根據當前所在的輸入字段自動確定。
$("input[@type=file]:nth(" + n +")")
然后,您會注意到每個選擇的文件; 將輸入名稱替換為文件名。 那應該是通過jQuery提交多個文件的非常非常基本的方法。
如果您想要一個項目:
$("input[@type=file]").change(function(){
doIt(this, fileMax);
});
那應該在找到最大文件的地方創建一個Div; 並附加到onEvent
。 上面的相關代碼也需要這些:
var fileMax = 3;
<input type="file" class="upload" name="fileX[]" />
這應該瀏覽DOM父樹; 然后分別創建字段。 那是一種方式; 另一種方法是您在SLC上看到的方法。 有很多方法可以做到這一點。 您只是要操縱多少jQuery?
希望能有所幫助; 對不起,如果我誤解了您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.