Go Back   Diễn Đàn Bo-Blog Việt Nam > Phụ Trợ Bo-Blog > Thủ Thuật Bo-Blog



About Me
Your Avatar

 
Trả lời Gởi Ðề Tài Mới
 
Ðiều Chỉnh Kiếm Trong Bài
  #1  
Old 27-02-2010, 02:02 AM
ROPking's Avatar
ROPking is offline
Senior Member
 
Tham gia ngày: Feb 2010
Bài gởi: 199
Gửi tin nhắn qua Yahoo chát tới ROPking
Default Lỗi operation abort ở IE - Cách khắc phục

Lỗi operation abort ở IE - Cách khắc phục


Click the image to open in full size.




Thông tin ở các nơi mà tôi tìm trên mạng đều chủ yếu phản ánh lỗi và sửa lỗi kiểu mì ăn liền chứ không có phân tích rõ ràng. Chỉ có chính trang Support của Microsoft mới mô tả đầy đủ và chi tiết.

Nguyên nhân lỗi

Lỗi này xảy ra khi IE 6, 7 không thể hiển thị được đúng 1 phần tử nào đó trong trang web. Chi tiết hơn, lỗi xảy ra khi có 1 phần tử A chứa 1 script, script này cố gắng làm thay đổi nội dung của phần tử cha của A. Thông thường, sự thay đổi nội dung phần tử cha của A được thực hiện thông qua các hàm Javascript appendChild và innerHTML.

Nói vậy hơi khó hiểu 1 chút, chúng ta xem ví dụ sau:

<html>
<body>
    <div>
        <script type="text/Javascript">
            document.body.innerHTML+="sample text";
        </script>
    </div>
</body>
</html>
Như ta thấy, đoạn script trên nằm trong phần tử div (phần tử A) và nó cố gắng làm thay đổi nội dung của phần tử body (phần tử cha của A), nên gây ra lỗi.

Đối với blogger chúng ta, thì dạng như thế này rất hay gặp khi bạn muốn bổ sung 1 script vào trang web.

Ở đây script được sinh ra động và được chèn vào body nhờ vào hàm appendChild. Bạn dễ dàng nhận thấy rằng nó cũng có cùng nguyên tắc với VD trước, và do đó, cũng sẽ có lỗi trên IE 6 và 7.

Cách khắc phục lỗi

Cách đơn giản nhất để khỏi gặp lỗi này là nâng cấp IE lên bản 8. Tuy nhiên, đó là vấn đề của người dùng, chúng ta không thể bắt họ thay đổi khi mà ta chưa sửa được lỗi.

Để sửa lỗi này, chúng ta phải tránh không gặp trường hợp 1 script cố gắng thay đổi nội dung của phần tử cha của A (A chứa script). Việc này phải làm bằng tay (tự code lại, hoặc sửa code) theo hướng chuyển script đó ra khỏi phần tử A.

Tốt nhất nên đưa script ra ngoài cùng (tức là chỉ nằm trong thẻ body). Khi đó nếu script có thay đổi nội dung trang web (tức là phần body), thì cũng không "phạm luật" (nên nhớ là body lúc này đóng vai trò là phần tử A, như vậy script chỉ thay đổi A chứ không thay đổi phần tử cha của A)

Trong trường hợp không đưa được script ra ngoài cùng, thì có thể tự tạo thêm 1 thẻ div khác (hoặc bất kì thẻ nào cũng được) ở đúng vị trí cần thay đổi, và để script thay đổi thẻ đó như VD sau:


<html>
  <body>
      <div id="targetContainer"></div>
      <div>
          <script type="text/Javascript">
               document.getElementById('targetContainer').innerHTML+="sample text";
          </script>
      </div>
  </body>
</html>
Như ta thấy, thay vì sửa đổi nội dung của phần tử body (cha của div chứa script), script chỉ sửa đổi phần tử div "anh em", như vậy không "phạm luật" và chạy tốt.

Blog Hỗn tạp bị dính lỗi này ở phần Các bài viết liên quan, và bây giờ đã được sửa lại.

Các trình bày, diễn giải và phân tích ở trên đều dựa theo trang Support của Microsoft. Hy vọng rằng nó sẽ có ích phần nào cho các bạn làm web.
Trả Lời Với Trích Dẫn
Trả lời Gởi Ðề Tài Mới

Tags
abort, , cách, khắc, lỗi, operation, phục

Ðiều Chỉnh Kiếm Trong Bài
Kiếm Trong Bài:

Kiếm Chi Tiết

Chuyển đến


Múi giờ GMT. Hiện tại là 08:19 PM.
Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
vdata

Bo-Blog Việt Nam

Bo-blog
9.9 10 13259