From 3997d2a904c07cc98281972f0c852aa9c3b3baea Mon Sep 17 00:00:00 2001 From: ilya Date: Wed, 4 Nov 2009 22:50:10 -0800 Subject: Add a workaround for a chrome/webkit bug that gives back bad scrollTop data: http://code.google.com/p/chromium/issues/detail?id=2891 There may still be another bug or some trickery needed to get proper scrollTop values all the time. --- vimiumFrontend.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'vimiumFrontend.js') diff --git a/vimiumFrontend.js b/vimiumFrontend.js index cb64361e..141a0c86 100644 --- a/vimiumFrontend.js +++ b/vimiumFrontend.js @@ -31,10 +31,21 @@ chrome.extension.onConnect.addListener(function (port, name) { else if (port.name == "getScrollPosition") { port.onMessage.addListener(function (args) { + + // These conditionals are necessary due to the following chrome/webkit bug: + // http://code.google.com/p/chromium/issues/detail?id=2891 + // + // There may be another bug or some javascript trickery necessary because scrollTop occasionally returns + // 3 or 108 on some sites (cnn.com, nytimes.com for example). + // + // TODO(ilya): Is this actually also necessary for scrollLeft? + var scrollTop = document.documentElement.scrollTop >= document.body.scrollTop ? document.documentElement.scrollTop : + document.body.scrollTop; + var scrollLeft = document.documentElement.scrollLeft >= document.body.scrollLeft ? document.documentElement.scrollLeft : + document.body.scrollLeft; var scrollPort = chrome.extension.connect({name: "returnScrollPosition"}); - scrollPort.postMessage({ scrollTop: document.body.scrollTop, - scrollLeft: document.body.scrollLeft, - currentTab: args.currentTab }); + scrollPort.postMessage({ scrollTop: scrollTop, scrollLeft: scrollLeft, currentTab: args.currentTab }); + }); } else if (port.name == "setScrollPosition") -- cgit v1.2.3