Ticket #8528 (closed bug: invalid)
IE9 throws "Access denied" when deleting an iframe that had previously made $.ajax calls
| Reported by: | ben@… | Owned by: | danheberden |
|---|---|---|---|
| Priority: | high | Milestone: | 1.5.2 |
| Component: | event | Version: | 1.5.1 |
| Keywords: | Cc: | ||
| Blocking: | Blocked by: |
Description
Situation:
You have a page that includes an iframe. That iframe makes $.ajax calls, and then is removed from the page from the parent. IE9 will throw the following error:
SCRIPT5: Access is denied.
I've debugged this a bit, and it's caused by the window unload event bound by xhrOnUnloadAbort(). When the iframe is removed from the page, the unload event is triggered, but IE9 passes an event object with "Access denied" for nearly every property, and jQuery chokes when it encounters it.
Even though this is an "Access denied" error, it doesn't seem to matter whether the iframe is hosted on another domain or not.
Host page:
<!DOCTYPE html>
<body>
<iframe src="http://localdev.com/~ben/disqus/ie9_frame.html"></iframe>
<a href="#">Delete me</a>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('a').click(function() {
$('iframe').remove();
});
});
</script>
</body>
</html>
Iframe src:
<!DOCTYPE html>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script>
$(function() {
$.get('/~ben/disqus/ie9.json', function() {
$('body').append("ajax call done");
});
});
</script>
</body>
</html>
Change History
comment:1 Changed 2 years ago by danheberden
- Keywords needsreview added
- Priority changed from undecided to high
- Status changed from new to open
- Component changed from unfiled to ajax
comment:3 Changed 2 years ago by danheberden
- Owner set to danheberden
- Status changed from open to assigned
- Milestone changed from 1.next to 1.5.2
Please follow the bug reporting guidlines and use jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.

http://jsfiddle.net/danheberden/qHmXe/4/show/ http://danheberden.com/share/3fc60.png