aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Crosby2009-11-07 23:02:46 -0800
committerPhil Crosby2009-11-07 23:03:16 -0800
commit9e37412a2bb7710a898c0732ca46f33a4b608afb (patch)
treece44f98c80aa2b02762caea45262ebd78feed42a
parenta996c5a370f1790714f3202320002c60fe82c61c (diff)
downloadvimium-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.html13
-rw-r--r--vimiumFrontend.js23
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); }
});
}
});