diff options
| author | Phil Crosby | 2009-11-07 23:02:46 -0800 |
|---|---|---|
| committer | Phil Crosby | 2009-11-07 23:03:16 -0800 |
| commit | 9e37412a2bb7710a898c0732ca46f33a4b608afb (patch) | |
| tree | ce44f98c80aa2b02762caea45262ebd78feed42a | |
| parent | a996c5a370f1790714f3202320002c60fe82c61c (diff) | |
| download | vimium-9e37412a2bb7710a898c0732ca46f33a4b608afb.tar.bz2 | |
Use window.scrollX and window.scrollY instead of document.scrollLeft/top.
It's easier to use on webkit and is not buggy.
| -rw-r--r-- | background_page.html | 13 | ||||
| -rw-r--r-- | vimiumFrontend.js | 23 |
2 files changed, 13 insertions, 23 deletions
diff --git a/background_page.html b/background_page.html index b18c87be..5ad8c2e6 100644 --- a/background_page.html +++ b/background_page.html @@ -10,7 +10,7 @@ // Event handlers var selectionChangedHandlers = []; - var getScrollPositionHandlers = {}; // tabId -> function (tab, scrollTop, scrollLeft) + var getScrollPositionHandlers = {}; // tabId -> function (tab, scrollX, scrollY); var tabLoadedHandlers = {}; // tabId -> function () chrome.extension.onConnect.addListener(function(port, name) { @@ -26,7 +26,7 @@ // Delete first to be sure there's no circular events. var toCall = getScrollPositionHandlers[args.currentTab.id]; delete getScrollPositionHandlers[args.currentTab.id]; - toCall(args.currentTab, args.scrollTop, args.scrollLeft); + toCall(args.currentTab, args.scrollX, args.scrollY); } } @@ -52,7 +52,7 @@ } // Returns the currently selected tab along with scroll coordinates. Pass in a callback of the form: - // function (tab, scrollTop, scrollLeft) { .. } + // function (tab, scrollX, scrollY) { .. } function getCurrentTabWithScrollPosition(callback) { chrome.tabs.getSelected(null, function (tab) { getScrollPositionHandlers[tab.id] = callback; @@ -67,9 +67,8 @@ } function removeTab(callback) { - getCurrentTabWithScrollPosition(function(tab, scrollTop, scrollLeft) { - tabQueue.push({ tabUrl: tab.url, scrollTop: scrollTop, - scrollLeft: scrollLeft }); + getCurrentTabWithScrollPosition(function(tab, scrollX, scrollY) { + tabQueue.push({ tabUrl: tab.url, scrollX: scrollX, scrollY: scrollY }); chrome.tabs.remove(tab.id); // We can't just call the callback here because we actually need to wait // for the selection to change to consider this action done. @@ -87,7 +86,7 @@ chrome.tabs.create({ url: tabQueueEntry.tabUrl }, function (tab) { tabLoadedHandlers[tab.id] = function () { var scrollPort = chrome.tabs.connect(tab.id, {name: "setScrollPosition"}); - scrollPort.postMessage({ scrollTop: tabQueueEntry.scrollTop, scrollLeft: tabQueueEntry.scrollLeft }); + scrollPort.postMessage({ scrollX: tabQueueEntry.scrollX, scrollY: tabQueueEntry.scrollY }); }; callback(); diff --git a/vimiumFrontend.js b/vimiumFrontend.js index 80f3eeb1..9301ee28 100644 --- a/vimiumFrontend.js +++ b/vimiumFrontend.js @@ -33,27 +33,18 @@ 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: scrollTop, scrollLeft: scrollLeft, currentTab: args.currentTab }); - + var scrollPort = chrome.extension.connect({ name: "returnScrollPosition" }); + scrollPort.postMessage({ + scrollX: window.scrollX, + scrollY: window.scrollY, + currentTab: args.currentTab + }); }); } else if (port.name == "setScrollPosition") { port.onMessage.addListener(function (args) { - if (args.scrollTop > 0 || args.scrollLeft > 0) { window.scrollBy(args.scrollLeft, args.scrollTop); } + if (args.scrollX > 0 || args.scrollY > 0) { window.scrollBy(args.scrollX, args.scrollY); } }); } }); |
