From cf8989938cec69f2284a49423a3d41b191cdff51 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Fri, 22 Jan 2010 18:38:25 -0800 Subject: [PATCH] Improved sizeOfString IE workaround --- AppKit/Platform/DOM/CPPlatformString.j | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/AppKit/Platform/DOM/CPPlatformString.j b/AppKit/Platform/DOM/CPPlatformString.j index 595ae184c..8219f6a59 100644 --- a/AppKit/Platform/DOM/CPPlatformString.j +++ b/AppKit/Platform/DOM/CPPlatformString.j @@ -44,14 +44,13 @@ var DOMSpanElement = nil, + (void)createDOMElements { var DOMIFrameElement = document.createElement("iframe"); - - DOMIFrameElement.name = name = "iframe_" + FLOOR(RAND() * 10000); + // necessary for Safari caching bug: + DOMIFrameElement.name = "iframe_" + FLOOR(RAND() * 10000); DOMIFrameElement.style.position = "absolute"; - DOMIFrameElement.style.left = "-1000px"; - DOMIFrameElement.style.top = "-1000px"; - // TODO: investigate a better way to make this work in IE: - DOMIFrameElement.style.width = "1000px"; - DOMIFrameElement.style.height = "1000px"; + DOMIFrameElement.style.left = "-100px"; + DOMIFrameElement.style.top = "-100px"; + DOMIFrameElement.style.width = "1px"; + DOMIFrameElement.style.height = "1px"; DOMIFrameElement.style.borderWidth = "0px"; DOMIFrameElement.style.overflow = "hidden"; DOMIFrameElement.style.zIndex = 100000000000; @@ -59,19 +58,24 @@ var DOMSpanElement = nil, document.body.appendChild(DOMIFrameElement); var DOMIFrameDocument = (DOMIFrameElement.contentDocument || DOMIFrameElement.contentWindow.document); - DOMIFrameDocument.write(""); DOMIFrameDocument.close(); - DOMSpanElement = DOMIFrameDocument.createElement("span"); + // IE needs this wide
to prevent unwanted text wrapping: + var DOMDivElement = DOMIFrameDocument.createElement("div"); + DOMDivElement.style.position = "absolute"; + DOMDivElement.style.width = "100000px"; + DOMIFrameDocument.body.appendChild(DOMDivElement); + + DOMSpanElement = DOMIFrameDocument.createElement("span"); DOMSpanElement.style.position = "absolute"; DOMSpanElement.style.whiteSpace = "pre"; DOMSpanElement.style.visibility = "visible"; DOMSpanElement.style.padding = "0px"; DOMSpanElement.style.margin = "0px"; - DOMIFrameDocument.body.appendChild(DOMSpanElement); + DOMDivElement.appendChild(DOMSpanElement); } + (void)platformDidClearBodyElement:(CPNotification)aNotification