Closed Bug 192923 Opened 22 years ago Closed 22 years ago

Clicking JavaScript links stops rest of page from rendering

Categories

(Core :: DOM: Navigation, defect)

x86
All
defect
Not set
normal

Tracking

()

RESOLVED DUPLICATE of bug 130265

People

(Reporter: osavill, Assigned: adamlock)

References

()

Details

User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3b) Gecko/20030127 Build Identifier: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3b) Gecko/20030127 Goto http://www.suade.co.uk/gallery.shtml and click on a picture before the progress bar has reached 100% Result: Script text bleeds out over the main page and the rest of the page is not loaded. Goto http://www.denzilgrant.com/cgi-bin/RenderPages/Render?Tables.csv?1 and click on a price before the page has completely loaded. Result: The popup window in produced and renders correctly but the main page has stopped rendering with have completed images. These page work as expected in Opera, Konqueror and IE but not in Mozilla or Phoenix. Reproducible: Always Steps to Reproduce: 1.As described in `Details' 2. 3. Actual Results: As described in `Details' Expected Results: Mozilla should have continued to correctly load the rest of the page from which the java script URLs were launched
Confirming with Mozilla trunk binary 2003021108 on WinNT. Note, I do not have the experimental HTTP pipelining feature turned on. Once some of the images have loaded, I clicked on one of them (not one of the lower, empty image-boxes that had not yet loaded). Then page loading halted completely, and the <script> element beginning var imgArr1 = new Array( "/images/t/Cab/Blues Bros Stage Cut (Custom).jpg", etc. etc. was rendered as text on the page. The DOM Inspector showed that the content model had not formed, and the page did not respond to any further mouse clicks. No errors appeared in the JavaScript Console. Note: I saved the page locally and added a base element as follows: <BASE HREF="http://www.suade.co.uk/">. I then loaded the page off my local drive, and was UNABLE to reproduce the bug this way!!! If I clicked on an image just after it appeared, and before all the other images had loaded, the event handler for the image I clicked worked perfectly, and brought up a child window successfully. So this is some sort of timing issue; I don't know why we fail to form the content model properly when the page is loaded over the network. Note the JavaScript on this page creates large Arrays. However, I don't think this is a JS Engine issue, reassigning to Embedding:Docshell for further triage. Compare bug 76495: "Fetching a new page immediately disables user interaction with the one being viewed [keyboard, links, scrollbars become unresponsive]" Don't know if that is relevant at all to what's happening here. Note, IE6 has no trouble with the early-clicking.
Assignee: rogerl → adamlock
Status: UNCONFIRMED → NEW
Component: JavaScript Engine → Embedding: Docshell
Ever confirmed: true
OS: Linux → All
QA Contact: pschwartau → adamlock
Summary: Using java script links stop the rest of the page from rendering → Clicking JavaScript links stops rest of page from rendering
Confirmed with build 2003021008 under Windows XP SP1.
Confirming. It looks as though the link click is halting the page loading, however this is not a regression as the same behaviour can be observed in 1.0.x as well. My guess is that this behaviour has always been there. The page loading is halted by a call to Stop() in InternalLoad() in response to the link click event: nsDocShell::InternalLoad(nsDocShell * const 0x0415f050, nsIURI * 0x03f82128, nsIURI * 0x03964cd8, nsISupports * 0x00000000, int 0x00000001, const unsigned short * 0x0012f6c0, nsIInputStream * 0x00000000, nsIInputStream * 0x00000000, unsigned int 0x00200001, nsISHEntry * 0x00000000, int 0x00000001, nsIDocShell * * 0x00000000, nsIRequest * * 0x00000000) line 5203 nsWebShell::OnLinkClickSync(nsWebShell * const 0x0415f19c, nsIContent * 0x035f8f40, nsLinkVerb eLinkVerb_Replace, nsIURI * 0x03f82128, const unsigned short * 0x100ebc18 gCommonEmptyBuffer, nsIInputStream * 0x00000000, nsIInputStream * 0x00000000, nsIDocShell * * 0x00000000, nsIRequest * * 0x00000000) line 602 + 82 bytes OnLinkClickEvent::HandleEvent() line 476 HandlePLEvent(OnLinkClickEvent * 0x03e0bb58) line 490 PL_HandleEvent(PLEvent * 0x03e0bb58) line 663 + 10 bytes PL_ProcessPendingEvents(PLEventQueue * 0x00a72ef0) line 593 + 9 bytes nsEventQueueImpl::ProcessPendingEvents(nsEventQueueImpl * const 0x00a72df8) line 387 + 12 bytes nsWindow::DispatchPendingEvents() line 3729 nsWindow::ProcessMessage(unsigned int 0x00000202, unsigned int 0x00000000, long 0x024c0258, long * 0x0012fbf0) line 4089 nsWindow::WindowProc(HWND__ * 0x00040950, unsigned int 0x00000202, unsigned int 0x00000000, long 0x024c0258) line 1402 + 27 bytes USER32! 77d67ad7() USER32! 77d6ccd4() USER32! 77d44455() USER32! 77d495d5() nsAppShellService::Run(nsAppShellService * const 0x00b33178) line 480 main1(int 0x00000001, char * * 0x002a4458, nsISupports * 0x00a57fc0) line 1273 + 32 bytes main(int 0x00000001, char * * 0x002a4458) line 1636 + 37 bytes mainCRTStartup() line 338 + 17 bytes KERNEL32! 77e814c7() I don't know the best way to handle this. A javascript: link *could* replace the page content, or it might do something benign. In either case, the only way to know is by opening the javascript: channel and seeing if any data comes back. I suppose it may be possible to do just that and defer the Stop until data begins to arrive but it might be messy.
How do the other browsers out there get around this problem ?
Dupe of bug 130265 which has a fix in hand *** This bug has been marked as a duplicate of 130265 ***
Status: NEW → RESOLVED
Closed: 22 years ago
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.