Replace native "document.write" with deprecated fallback
authorTimo Tijhof <krinklemail@gmail.com>
Thu, 6 Aug 2015 02:55:53 +0000 (19:55 -0700)
committerTimo Tijhof <krinklemail@gmail.com>
Thu, 6 Aug 2015 02:57:38 +0000 (19:57 -0700)
In most browsers, calling "document.write" after the document is
ready results in the document being re-created with the specified
content (effectively replacing with blank page).

While this is a browser issue, mitigate this by replacing the
method with a fallback (wrapped in "mw.log.deprecate") that just
appends the given HTML to the document body.

Note that scripts do not execute when appended as HTML, they will
become dormant elements. It'll work for raw content as a basic
fallback, but it should become apparent to the end user that the
code needs to be upgraded.

Bug: T108139
Change-Id: Ic9056d7a779f234a28ddad005fd4d76f2e750fcc

resources/src/mediawiki.legacy/wikibits.js

index 32cd79a..1f01110 100644 (file)
        win.importScript = importScript;
        win.importStylesheet = importStylesheet;
 
+       // Replace document.write with basic html parsing that appends
+       // to the <body> to avoid blanking pages. Added JavaScript will not run.
+       mw.log.deprecate( document, 'write', function ( html ) {
+               $( 'body' ).append( $.parseHTML( html ) );
+       }, 'Use jQuery or mw.loader.load instead.' );
+
 }( mediaWiki, jQuery ) );