From 60f197f16c24466935c2c96b070323fddcf1b1be Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Fri, 22 Aug 2014 13:31:55 -0400 Subject: [PATCH 1/2] Disable MathPlayer for IE10 and above. --- unpacked/MathJax.js | 49 ++++++++++++++++------------ unpacked/jax/output/NativeMML/jax.js | 5 +-- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/unpacked/MathJax.js b/unpacked/MathJax.js index 0e259d5d4..404054945 100644 --- a/unpacked/MathJax.js +++ b/unpacked/MathJax.js @@ -3118,28 +3118,35 @@ MathJax.Hub.Startup = { MSIE: function (browser) { browser.isIE9 = !!(document.documentMode && (window.performance || window.msPerformance)); MathJax.HTML.setScriptBug = !browser.isIE9 || document.documentMode < 9; - var MathPlayer = false; - try {new ActiveXObject("MathPlayer.Factory.1"); browser.hasMathPlayer = MathPlayer = true} - catch (err) {} - try { - if (MathPlayer && !STARTUP.params.NoMathPlayer) { - var mathplayer = document.createElement("object"); - mathplayer.id = "mathplayer"; mathplayer.classid = "clsid:32F66A20-7614-11D4-BD11-00104BD3F987"; - document.getElementsByTagName("head")[0].appendChild(mathplayer); - document.namespaces.add("m","http://www.w3.org/1998/Math/MathML"); - browser.mpNamespace = true; - if (document.readyState && (document.readyState === "loading" || - document.readyState === "interactive")) { - document.write(''); - browser.mpImported = true; + // + // MathPlayer doesn't function properly in IE10, and not at all in IE11, + // so don't even try to load it. + // + if (document.documentMode < 10 && !STARTUP.params.NoMathPlayer) { + try { + new ActiveXObject("MathPlayer.Factory.1"); + browser.hasMathPlayer = true; + } catch (err) {} + try { + if (browser.hasMathPlayer) { + var mathplayer = document.createElement("object"); + mathplayer.id = "mathplayer"; mathplayer.classid = "clsid:32F66A20-7614-11D4-BD11-00104BD3F987"; + document.getElementsByTagName("head")[0].appendChild(mathplayer); + document.namespaces.add("m","http://www.w3.org/1998/Math/MathML"); + browser.mpNamespace = true; + if (document.readyState && (document.readyState === "loading" || + document.readyState === "interactive")) { + document.write(''); + browser.mpImported = true; + } + } else { + // Adding any namespace avoids a crash in IE9 in IE9-standards mode + // (any reference to document.namespaces before document.readyState is + // "complete" causes an "unspecified error" to be thrown) + document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink"); } - } else { - // Adding any namespace avoids a crash in IE9 in IE9-standards mode - // (any reference to document.namespaces before document.readyState is - // "complete" causes an "unspecified error" to be thrown) - document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink"); - } - } catch (err) {} + } catch (err) {} + } } }); HUB.Browser.Select(MathJax.Message.browsers); diff --git a/unpacked/jax/output/NativeMML/jax.js b/unpacked/jax/output/NativeMML/jax.js index a693afbf0..63a3d5f75 100644 --- a/unpacked/jax/output/NativeMML/jax.js +++ b/unpacked/jax/output/NativeMML/jax.js @@ -156,7 +156,7 @@ this.Mouseout = HOVER.Mouseout; this.Mousemove = HOVER.Mousemove; - if (!isMSIE) { + if (!HUB.Browser.hasMathPlayer) { // Used in preTranslate to get scaling factors this.EmExSpan = HTML.Element("span", {style:{position:"absolute","font-size-adjust":"none"}}, @@ -173,10 +173,11 @@ }, // // Set up MathPlayer for IE on the first time through. + // Get the ex and em sizes. // InitializeMML: function () { this.initialized = true; - if (isMSIE) { + if (HUB.Browser.hasMathPlayer) { try { // // Insert data needed to use MathPlayer for MathML output From a56931fff25d372d28fc3610c9191b9f7e77b742 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Fri, 22 Aug 2014 14:17:55 -0400 Subject: [PATCH 2/2] Fix use of HTMLCollections to work with IE8 (grrr!) --- unpacked/MathJax.js | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/unpacked/MathJax.js b/unpacked/MathJax.js index 404054945..1d6946d05 100644 --- a/unpacked/MathJax.js +++ b/unpacked/MathJax.js @@ -2359,7 +2359,7 @@ MathJax.Hub = { if (callback == null && (element instanceof Array || typeof element === 'function')) {try {MathJax.Callback(element); callback = element; element = null} catch(e) {}} if (element == null) {element = this.config.elements || []} - if (element instanceof HTMLCollection) {element = [].slice.apply(element)} + if (this.isHTMLCollection(element)) {element = this.HTMLCollection2Array(element)} if (!(element instanceof Array)) {element = [element]} element = [].concat(element); // make a copy so the original isn't changed for (var i = 0, m = element.length; i < m; i++) @@ -2375,8 +2375,8 @@ MathJax.Hub = { }, elementScripts: function (element) { - if (element instanceof Array || element instanceof HTMLCollection) { - var scripts = []; + var scripts = []; + if (element instanceof Array || this.isHTMLCollection(element)) { for (var i = 0, m = element.length; i < m; i++) {scripts.push.apply(scripts,this.elementScripts(element[i]))} return scripts; @@ -2385,7 +2385,25 @@ MathJax.Hub = { if (!document.body) {document.body = document.getElementsByTagName("body")[0]} if (element == null) {element = document.body} if (element.tagName != null && element.tagName.toLowerCase() === "script") {return [element]} - return element.getElementsByTagName("script"); + scripts = element.getElementsByTagName("script"); + if (this.msieHTMLCollectionBug) {scripts = this.HTMLCollection2Array(scripts)} + return scripts; + }, + + // + // IE8 fails to check "obj instanceof HTMLCollection" for some values of obj. + // + isHTMLCollection: function (obj) { + return (typeof(obj) === "object" && obj instanceof HTMLCollection); + }, + // + // IE8 doesn't deal with HTMLCollection as an array, so convert to array + // + HTMLCollection2Array: function (nodes) { + if (!this.msieHTMLCollectionBug) {return [].slice.call(nodes)} + var NODES = []; + for (var i = 0, m = nodes.length; i < m; i++) {NODES[i] = nodes[i]} + return NODES; }, Insert: function (dst,src) { @@ -3118,6 +3136,7 @@ MathJax.Hub.Startup = { MSIE: function (browser) { browser.isIE9 = !!(document.documentMode && (window.performance || window.msPerformance)); MathJax.HTML.setScriptBug = !browser.isIE9 || document.documentMode < 9; + MathJax.Hub.msieHTMLCollectionBug = (document.documentMode < 9); // // MathPlayer doesn't function properly in IE10, and not at all in IE11, // so don't even try to load it.