diff --git a/app/background.js b/app/background.js index 7700768..7ddd1a4 100644 --- a/app/background.js +++ b/app/background.js @@ -123,4 +123,18 @@ function loadScript(src) { } } catch (e) { console.error('Firebase initialization error:', e); - } \ No newline at end of file + } + + // Notify content scripts when SPA-style history events change the URL. + const emitUrlChange = (details) => { + if (details.frameId !== 0) { + return; + } + chrome.tabs.sendMessage(details.tabId, { + action: 'urlChanged', + url: details.url + }); + }; + chrome.webNavigation.onHistoryStateUpdated.addListener(emitUrlChange, { + url: [{ schemes: ['http', 'https'] }] + }); diff --git a/app/manifest.json b/app/manifest.json index 4f07e08..262ee48 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -39,7 +39,8 @@ "permissions": [ "activeTab", "storage", - "alarms" + "alarms", + "webNavigation" ], "host_permissions": [ "" diff --git a/app/scripts/modal.js b/app/scripts/modal.js index 526869e..19085b3 100644 --- a/app/scripts/modal.js +++ b/app/scripts/modal.js @@ -30,6 +30,11 @@ chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { _setConfig(request.parameter); sendResponse({success: true}); break; + case 'urlChanged': + _syncCurrentContext(request.url); + _addEnvironmentLabel(); + sendResponse({handled: true}); + break; return true; } return true; @@ -47,6 +52,16 @@ var ENV_SETTINGS = []; var HOSTED_FILE = ""; var AUTO_IMPORT = 0; +function _syncCurrentContext(nextUrl) { + var targetUrl = nextUrl || window.location.href; + CURRENT_LOCATION = targetUrl; + try { + CURRENT_DOMAIN = new URL(targetUrl).hostname; + } catch (e) { + CURRENT_DOMAIN = window.location.hostname; + } +} + // verify settings and add label if necessary function _addEnvironmentLabel() { chrome.storage.sync.get({current_state: { @@ -62,28 +77,34 @@ function _addEnvironmentLabel() { _updateMatchers(data.current_state.env_settings, data.current_state.last_update); } + var matched = false; for(var i = 0; i -1) { CURRENT_CONFIG = PLUGIN_STATE.strictList[i]; _addMarker(CURRENT_CONFIG); - return; + matched = true; + break; } } - for(var i = 0; i