2012-05-19 29 views
16
SCRIPT5: Access denied 
jquery.min.js, line 3 char 3769 

Tôi nhận được lỗi này bằng hình thức đơn giản nộp chỉ trong IEhình thức nộp - truy cập IE bị từ chối - cùng miền

$("#icon_upl").click(function(){ //icon_upl is button which open dialog 
    $("[name=icon]").click(); 
}); 


$("[name=icon]").change(function() { //icon is hidden file input 
    $("[name=upload_icon]").submit(); 
}); 

Tôi gửi rằng hình thức iframe ẩn đó là có cùng tên miền.

<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;display:none;"></iframe> 
<form name="upload_icon" action="upload_icon.php" method="post" enctype="multipart/form-data" target="upload_target"> 

nộp đầu vào không giúp

Tôi không nhận được nó cuz nếu tôi cố gắng để gửi một hình thức mà hoạt động tốt

+0

bạn đang thử nghiệm phiên bản nào của IE? – Spudley

+0

Tôi đang sử dụng tức là 9.0.2 – Lukasik

+1

Có một vài cách giải quyết được ghi lại here. –

Trả lời

1

Bạn có thể làm cho một sự kiện trực tiếp bắn vào trường nhập ẩn vì bạn có thể không bắt nó. Có thể ràng buộc sự kiện với nó và kích hoạt nó qua một sự kiện khác.

ví dụ:

// binding event to hidden field 
$('input[name=icon]:hidden').on('click', function() { 
    alert('Hidden triggered'); 
}); 

// some button/ or else 
// some_target is any valid selector you can use 
$('some_target').on('click', function() { 
    $('input[name=icon]:hidden').click(); // triggering click on hidden field will alert 'Hidden triggered' 
}); 

Lưu ý: Nhưng nó không rõ ràng từ bài viết của bạn rằng nếu bạn đã có một cái gì đó như thế này hay không.

+0

Tôi có một số thứ khác - nút tải lên - onclick {fileinput.click()} – Lukasik

0

Nó có vẻ là không thể

  1. Bạn không thể đọc được "giá trị" của nguyên tố này vì nó giữ tên tập tin.
  2. Bạn không thể kích hoạt menu chọn tệp qua JS.
  3. Bạn không thể kích hoạt trình kiểm soát trình tải lên tệp qua JS.

từ getting access is denied error on IE8

19

tôi đã HTML tương tự và mã jQuery và gặp phải vấn đề tương tự (ví dụ: 'Truy cập bị từ chối.' JavaScript lỗi trong Internet Explorer), mà tôi quản lý để giải quyết bằng cách gợi ý từ this (tuyệt vời) trả lời.

Trong trường hợp của bạn:

  1. Thay đổi #icon_upl <button>/<input> đến một <label> và tận dụng các tính năng khả năng tiếp cận của thẻ bằng cách thiết lập thuộc tính for vào nó để trỏ đến yếu tố <input name="icon" type="file"> của bạn.

    Điều này làm cho trình xử lý sự kiện click() của bạn trở nên dư thừa. Tuy nhiên, nhấp vào <label> trong Firefox dường như không kích hoạt hộp thoại <input> do đó bạn sẽ cần phải thực hiện kiểm tra trình duyệt và vẫn có trình xử lý sự kiện click() nếu trình duyệt dựa trên Mozilla.

  2. Để thiết bị hoạt động, bạn cần đảm bảo rằng tệp <input> của bạn không bị ẩn bằng cách đặt vị trí của nó là tuyệt đối và di chuyển nó ra ngoài màn hình.

+0

Làm việc như một sự quyến rũ! Cảm ơn bạn! –

+0

Tuyệt vời! cảm ơn! – Samson

+0

rất đơn giản, rất thông minh, cảm ơn bạn rất nhiều vì đã chỉ ra! –

24

Nếu bạn kích hoạt hộp thoại chọn tệp qua JS thì bạn sẽ nhận được lỗi truy cập bị từ chối khi gửi biểu mẫu. IE không cho phép điều này.Bạn sẽ phải yêu cầu người sử dụng bấm vào tập tin loại đầu vào trực tiếp

Xem thêm chi tiết tại đây https://github.com/valums/file-uploader/issues/118#issuecomment-1387612

Bạn có thể thử phong cách các tập tin loại đầu vào mặc dù http://www.quirksmode.org/dom/inputfile.html

+0

<= IE 10 không cho phép điều này. IE11 hiện, tuy nhiên. Cám ơn vì cái này. – Jason

5

tôi đã tìm thấy một cách khác để làm điều này ... Tôi đã thực hiện kiểm tra và tôi thấy nó hoạt động sau 2 hoặc 3 nhấp vào nút gửi.

tôi đã thử một số giải pháp nhưng tìm thấy điều này bằng chính tôi. điều này chỉ dành cho ví dụ.

lưu ý rằng tôi không sử dụng phương thức gửi jquery vì chúng xử lý lỗi.

function Submit() { 
    try { 
     $('#FormName')[0].submit(); 
    } catch (e) { 
     setTimeout(function() { Submit(); }, 50); 
    } 
} 

ps. xin lỗi vì tiếng anh xấu của tôi, đây không phải là ngôn ngữ đầu tiên của tôi.

+0

Tốt hơn với một setInterval vì kích hoạt trên đầu vào [type = submit] cần phải được kích hoạt hai lần. – Warface

+0

@Warface nếu bạn sử dụng setInterval, làm thế nào để bạn chắc chắn rằng nó không gửi đôi? như tôi đã nói, nó hoạt động trên 2 HOẶC 3 lần. nó không giống nhau trong tất cả các trình duyệt. Các setTimeout chỉ là để trì hoãn submin khi một ngoại lệ là ném. – Benoit

Các vấn đề liên quan