aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorilya2009-11-04 22:50:10 -0800
committerilya2009-11-04 23:11:11 -0800
commit3997d2a904c07cc98281972f0c852aa9c3b3baea (patch)
tree27c3253fdf55096c9a76aa04cac45f9cbdc9d17d
parent0d8394d9b46f99bd94aeeefb4f11ecda982327aa (diff)
downloadvimium-3997d2a904c07cc98281972f0c852aa9c3b3baea.tar.bz2
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.
-rw-r--r--vimiumFrontend.js17
1 files changed, 14 insertions, 3 deletions
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")