diff options
| -rw-r--r-- | background_scripts/main.coffee | 3 | ||||
| -rw-r--r-- | content_scripts/vimium_frontend.coffee | 5 | ||||
| -rw-r--r-- | pages/options.coffee | 8 | 
3 files changed, 12 insertions, 4 deletions
| diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee index b390fe1c..ecf18bef 100644 --- a/background_scripts/main.coffee +++ b/background_scripts/main.coffee @@ -26,6 +26,7 @@ validFirstKeys = {}  singleKeyCommands = []  focusedFrame = null  frameIdsForTab = {} +root.urlForTab = {}  # Keys are either literal characters, or "named" - for example <a-b> (alt+b), <left> (left arrow) or <f12>  # This regular expression captures two groups: the first is a named key, the second is the remainder of @@ -462,6 +463,7 @@ chrome.tabs.onRemoved.addListener (tabId) ->    tabInfoMap.deletor = -> delete tabInfoMap[tabId]    setTimeout tabInfoMap.deletor, 1000    delete frameIdsForTab[tabId] +  delete urlForTab[tabId]  chrome.tabs.onActiveChanged.addListener (tabId, selectInfo) -> updateActiveState(tabId) @@ -647,6 +649,7 @@ unregisterFrame = (request, sender) ->  handleFrameFocused = (request, sender) ->    tabId = sender.tab.id +  urlForTab[tabId] = request.url    if frameIdsForTab[tabId]?      frameIdsForTab[tabId] =        [request.frameId, (frameIdsForTab[tabId].filter (id) -> id != request.frameId)...] diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 429657fc..757cc0ad 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -190,6 +190,7 @@ initializePreDomReady = ->      # Ensure the sendResponse callback is freed.      false +  # Wrapper to install event listeners.  Syntactic sugar.  installListener = (element, event, callback) ->    element.addEventListener(event, -> @@ -227,12 +228,12 @@ getActiveState = ->    return { enabled: isEnabledForUrl, passKeys: passKeys }  # -# The backend needs to know which frame has focus. +# The backend needs to know which frame has focus, and the active URL.  #  registerFocus = ->    # settings may have changed since the frame last had focus    settings.load() -  chrome.runtime.sendMessage({ handler: "frameFocused", frameId: frameId }) +  chrome.runtime.sendMessage handler: "frameFocused", frameId: frameId, url: window.location.toString()  #  # Initialization tasks that must wait for the document to be ready. diff --git a/pages/options.coffee b/pages/options.coffee index d2950348..61b055c2 100644 --- a/pages/options.coffee +++ b/pages/options.coffee @@ -271,8 +271,12 @@ initPopupPage = ->      exclusions = null      document.getElementById("optionsLink").setAttribute "href", chrome.runtime.getURL("pages/options.html") +    # As the active URL, we choose the most recently registered URL from a frame in the tab, or the tab's own +    # URL. +    url = chrome.extension.getBackgroundPage().urlForTab[tab.id] || tab.url +      updateState = -> -      rule = bgExclusions.getRule tab.url, exclusions.readValueFromElement() +      rule = bgExclusions.getRule url, exclusions.readValueFromElement()        $("state").innerHTML = "Vimium will " +          if rule and rule.passKeys            "exclude <span class='code'>#{rule.passKeys}</span>" @@ -302,7 +306,7 @@ initPopupPage = ->          window.close()      # Populate options. Just one, here. -    exclusions = new ExclusionRulesOnPopupOption(tab.url, "exclusionRules", onUpdated) +    exclusions = new ExclusionRulesOnPopupOption(url, "exclusionRules", onUpdated)      updateState()      document.addEventListener "keyup", updateState | 
