Version 1.8.4
- Force redirects only on main frames - Added google link fix script, to avoid the sub frame permission for force redirection on google
This commit is contained in:
parent
7ccd78ad39
commit
ad3ab8df07
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [1.8.4] - 2019-09-26
|
||||||
|
|
||||||
|
### Compatibility note
|
||||||
|
- Require Firefox >= 55
|
||||||
|
- Require Chrome >= 22
|
||||||
|
|
||||||
|
## Changed
|
||||||
|
- Force redirects only on main frames
|
||||||
|
- Added google link fix script, to avoid the sub frame permission for force redirection on google
|
||||||
|
|
||||||
## [1.8.3] - 2019-09-23
|
## [1.8.3] - 2019-09-23
|
||||||
|
|
||||||
### Compatibility note
|
### Compatibility note
|
||||||
|
|
|
@ -39,13 +39,16 @@
|
||||||
<div class="ui icon message" id="issue_253_test"></div>
|
<div class="ui icon message" id="issue_253_test"></div>
|
||||||
|
|
||||||
<iframe src="https://kevinroebert.gitlab.io/ClearUrls/void/index.html?ref=gitlab"
|
<iframe src="https://kevinroebert.gitlab.io/ClearUrls/void/index.html?ref=gitlab"
|
||||||
height="0" width="0" id="void_roebert_eu_iframe" style="border:0; border:none;"></iframe>
|
height="1" width="1" id="void_roebert_eu_iframe" style="border:0; border:none;"></iframe>
|
||||||
|
|
||||||
<iframe src="https://youtube.com/redirect?q=https%3A%2F%2Fkevinroebert.gitlab.io%2FClearUrls%2Fvoid%2Findex.html%3Fref%3Dgitlab"
|
<iframe src="https://youtube.com/redirect?q=https%3A%2F%2Fkevinroebert.gitlab.io%2FClearUrls%2Fvoid%2Findex.html%3Fref%3Dgitlab"
|
||||||
height="0" width="0" id="redirect_roebert_eu_iframe" style="border:0; border:none;"></iframe>
|
height="1" width="1" id="redirect_roebert_eu_iframe" style="border:0; border:none;"></iframe>
|
||||||
|
|
||||||
<img id="i253_roebert_eu_img" height="0" width="0"/>
|
<iframe src="https://www.google.com/url?rct=j&url=https%3A%2F%2Fkevinroebert.gitlab.io%2FClearUrls%2Fi253.html"
|
||||||
<img id="block_roebert_eu_img" height="0" width="0"/>
|
height="1" width="1" id="i253_roebert_eu_iframe" style="border:0; border:none;"></iframe>
|
||||||
|
|
||||||
|
<img id="i253_roebert_eu_img" height="1" width="1"/>
|
||||||
|
<img id="block_roebert_eu_img" height="1" width="1"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
|
||||||
|
|
261
clearurls.js
261
clearurls.js
|
@ -630,148 +630,147 @@ function start()
|
||||||
* Expand urls and bypass tracking.
|
* Expand urls and bypass tracking.
|
||||||
* Cancel the active request.
|
* Cancel the active request.
|
||||||
*/
|
*/
|
||||||
if(result.redirect &&
|
if(result.redirect)
|
||||||
(request.type === 'main_frame' ||
|
{
|
||||||
request.type === 'sub_frame'))
|
if(providers[i].shouldForceRedirect() &&
|
||||||
{
|
request.type === 'main_frame') {
|
||||||
if(providers[i].shouldForceRedirect() ) {
|
browser.tabs.update(request.tabId, {url: result.url});
|
||||||
browser.tabs.update(request.tabId, {url: result.url});
|
return {cancel: true};
|
||||||
return {cancel: true};
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
redirectUrl: result.url
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
return {
|
||||||
* Cancel the Request and redirect to the site blocked alert page,
|
redirectUrl: result.url
|
||||||
* to inform the user about the full url blocking.
|
};
|
||||||
*/
|
}
|
||||||
if(result.cancel){
|
|
||||||
return {
|
|
||||||
redirectUrl: siteBlockedAlert
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ensure that the function go not into
|
* Cancel the Request and redirect to the site blocked alert page,
|
||||||
* a loop.
|
* to inform the user about the full url blocking.
|
||||||
*/
|
*/
|
||||||
if(result.changes){
|
if(result.cancel){
|
||||||
return {
|
return {
|
||||||
redirectUrl: result.url
|
redirectUrl: siteBlockedAlert
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ensure that the function go not into
|
||||||
|
* a loop.
|
||||||
|
*/
|
||||||
|
if(result.changes){
|
||||||
|
return {
|
||||||
|
redirectUrl: result.url
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default case
|
|
||||||
return {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// Default case
|
||||||
* Call loadOldDataFromStore, getHash, counter, status and log functions
|
return {};
|
||||||
*/
|
|
||||||
|
|
||||||
loadOldDataFromStore();
|
|
||||||
getHash();
|
|
||||||
setBadgedStatus();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Call by each tab is updated.
|
|
||||||
* And if url has changed.
|
|
||||||
*/
|
|
||||||
function handleUpdated(tabId, changeInfo, tabInfo) {
|
|
||||||
if(changeInfo.url)
|
|
||||||
{
|
|
||||||
delete badges[tabId];
|
|
||||||
}
|
|
||||||
currentURL = tabInfo.url;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Call by each tab is updated.
|
|
||||||
*/
|
|
||||||
browser.tabs.onUpdated.addListener(handleUpdated);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Call by each tab change to set the actual tab id
|
|
||||||
*/
|
|
||||||
function handleActivated(activeInfo) {
|
|
||||||
tabid = activeInfo.tabId;
|
|
||||||
browser.tabs.get(tabid).then(function (tab) {
|
|
||||||
currentURL = tab.url;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Call by each tab change.
|
|
||||||
*/
|
|
||||||
browser.tabs.onActivated.addListener(handleActivated);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check the request.
|
|
||||||
*/
|
|
||||||
function promise(requestDetails)
|
|
||||||
{
|
|
||||||
if(isDataURL(requestDetails))
|
|
||||||
{
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var ret = clearUrl(requestDetails);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* To prevent long loading on data urls
|
|
||||||
* we will check here for data urls.
|
|
||||||
*
|
|
||||||
* @type {requestDetails}
|
|
||||||
* @return {boolean}
|
|
||||||
*/
|
|
||||||
function isDataURL(requestDetails) {
|
|
||||||
var s = requestDetails.url;
|
|
||||||
|
|
||||||
return s.substring(0,4) == "data";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Call by each Request and checking the url.
|
|
||||||
*
|
|
||||||
* @type {Array}
|
|
||||||
*/
|
|
||||||
browser.webRequest.onBeforeRequest.addListener(
|
|
||||||
promise,
|
|
||||||
{urls: ["<all_urls>"], types: getData("types")},
|
|
||||||
["blocking"]
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to log all activities from ClearUrls.
|
* Call loadOldDataFromStore, getHash, counter, status and log functions
|
||||||
* Only logging when activated.
|
|
||||||
* The log is only temporary saved in the cache and will
|
|
||||||
* permanently saved with the saveLogOnClose function.
|
|
||||||
*
|
|
||||||
* @param beforeProcessing the url before the clear process
|
|
||||||
* @param afterProcessing the url after the clear process
|
|
||||||
* @param rule the rule that triggered the process
|
|
||||||
*/
|
*/
|
||||||
function pushToLog(beforeProcessing, afterProcessing, rule)
|
|
||||||
{
|
loadOldDataFromStore();
|
||||||
if(storage.loggingStatus)
|
getHash();
|
||||||
|
setBadgedStatus();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call by each tab is updated.
|
||||||
|
* And if url has changed.
|
||||||
|
*/
|
||||||
|
function handleUpdated(tabId, changeInfo, tabInfo) {
|
||||||
|
if(changeInfo.url)
|
||||||
{
|
{
|
||||||
storage.log.log.push(
|
delete badges[tabId];
|
||||||
{
|
}
|
||||||
"before": beforeProcessing,
|
currentURL = tabInfo.url;
|
||||||
"after": afterProcessing,
|
}
|
||||||
"rule": rule,
|
|
||||||
"timestamp": Date.now()
|
/**
|
||||||
}
|
* Call by each tab is updated.
|
||||||
);
|
*/
|
||||||
deferSaveOnDisk('log');
|
browser.tabs.onUpdated.addListener(handleUpdated);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call by each tab change to set the actual tab id
|
||||||
|
*/
|
||||||
|
function handleActivated(activeInfo) {
|
||||||
|
tabid = activeInfo.tabId;
|
||||||
|
browser.tabs.get(tabid).then(function (tab) {
|
||||||
|
currentURL = tab.url;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call by each tab change.
|
||||||
|
*/
|
||||||
|
browser.tabs.onActivated.addListener(handleActivated);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check the request.
|
||||||
|
*/
|
||||||
|
function promise(requestDetails)
|
||||||
|
{
|
||||||
|
if(isDataURL(requestDetails))
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var ret = clearUrl(requestDetails);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To prevent long loading on data urls
|
||||||
|
* we will check here for data urls.
|
||||||
|
*
|
||||||
|
* @type {requestDetails}
|
||||||
|
* @return {boolean}
|
||||||
|
*/
|
||||||
|
function isDataURL(requestDetails) {
|
||||||
|
var s = requestDetails.url;
|
||||||
|
|
||||||
|
return s.substring(0,4) == "data";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call by each Request and checking the url.
|
||||||
|
*
|
||||||
|
* @type {Array}
|
||||||
|
*/
|
||||||
|
browser.webRequest.onBeforeRequest.addListener(
|
||||||
|
promise,
|
||||||
|
{urls: ["<all_urls>"], types: getData("types")},
|
||||||
|
["blocking"]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to log all activities from ClearUrls.
|
||||||
|
* Only logging when activated.
|
||||||
|
* The log is only temporary saved in the cache and will
|
||||||
|
* permanently saved with the saveLogOnClose function.
|
||||||
|
*
|
||||||
|
* @param beforeProcessing the url before the clear process
|
||||||
|
* @param afterProcessing the url after the clear process
|
||||||
|
* @param rule the rule that triggered the process
|
||||||
|
*/
|
||||||
|
function pushToLog(beforeProcessing, afterProcessing, rule)
|
||||||
|
{
|
||||||
|
if(storage.loggingStatus)
|
||||||
|
{
|
||||||
|
storage.log.log.push(
|
||||||
|
{
|
||||||
|
"before": beforeProcessing,
|
||||||
|
"after": afterProcessing,
|
||||||
|
"rule": rule,
|
||||||
|
"timestamp": Date.now()
|
||||||
|
}
|
||||||
|
);
|
||||||
|
deferSaveOnDisk('log');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
76
core_js/google_link_fix.js
Normal file
76
core_js/google_link_fix.js
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
/*
|
||||||
|
* ClearURLs
|
||||||
|
* Copyright (c) 2017-2019 Kevin Röbert
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* Based on:
|
||||||
|
* Remove Google Redirection
|
||||||
|
* https://github.com/kodango/Remove-Google-Redirection/blob/master/extension/chrome/remove-google-redirection.user.js
|
||||||
|
* Copyright (c) 2017 kodango
|
||||||
|
* MIT License: https://github.com/kodango/Remove-Google-Redirection/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
(function (window) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function injectFunction(func) {
|
||||||
|
var ele = document.createElement('script');
|
||||||
|
var s = document.getElementsByTagName('script')[0];
|
||||||
|
|
||||||
|
ele.type = 'text/javascript';
|
||||||
|
ele.textContent = '(' + func + ')();';
|
||||||
|
|
||||||
|
s.parentNode.insertBefore(ele, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Disable the url rewrite function
|
||||||
|
*/
|
||||||
|
function disableURLRewrite() {
|
||||||
|
function inject_init() {
|
||||||
|
/* Define the url rewrite function */
|
||||||
|
Object.defineProperty(window, 'rwt', {
|
||||||
|
value: function() { return true; },
|
||||||
|
writable: false, // set the property to read-only
|
||||||
|
configurable: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
injectFunction(inject_init);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The main entry
|
||||||
|
*/
|
||||||
|
function main()
|
||||||
|
{
|
||||||
|
disableURLRewrite();
|
||||||
|
|
||||||
|
document.addEventListener('mouseover', function (event) {
|
||||||
|
var a = event.target, depth = 1;
|
||||||
|
|
||||||
|
while (a && a.tagName != 'A' && depth-- > 0) {
|
||||||
|
a = a.parentNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a && a.tagName == 'A') {
|
||||||
|
a.removeAttribute('onmousedown');
|
||||||
|
var clone = a.cloneNode(true);
|
||||||
|
a.parentNode.replaceChild(clone, a);
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
||||||
|
})(window);
|
118
manifest.json
118
manifest.json
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"name": "ClearURLs",
|
"name": "ClearURLs",
|
||||||
"version": "1.8.3",
|
"version": "1.8.4",
|
||||||
"author": "Kevin Röbert",
|
"author": "Kevin Röbert",
|
||||||
"description": "Remove tracking elements from URLs.",
|
"description": "Remove tracking elements from URLs.",
|
||||||
"homepage_url": "https://gitlab.com/KevinRoebert/ClearUrls",
|
"homepage_url": "https://gitlab.com/KevinRoebert/ClearUrls",
|
||||||
|
@ -59,9 +59,9 @@
|
||||||
"browser-polyfill.js",
|
"browser-polyfill.js",
|
||||||
"external_js/jquery-3.2.1.min.js",
|
"external_js/jquery-3.2.1.min.js",
|
||||||
"external_js/sha256.jquery.js",
|
"external_js/sha256.jquery.js",
|
||||||
"core_js/message_handler.js",
|
"core_js/message_handler.js",
|
||||||
"core_js/tools.js",
|
"core_js/tools.js",
|
||||||
"core_js/storage.js",
|
"core_js/storage.js",
|
||||||
"clearurls.js",
|
"clearurls.js",
|
||||||
"core_js/pureCleaning.js",
|
"core_js/pureCleaning.js",
|
||||||
"core_js/context_menu.js",
|
"core_js/context_menu.js",
|
||||||
|
@ -75,9 +75,111 @@
|
||||||
"js": [
|
"js": [
|
||||||
"browser-polyfill.js"
|
"browser-polyfill.js"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"all_frames": true,
|
||||||
|
"matches": ["*://*.google.com/*", "*://*.google.ad/*",
|
||||||
|
"*://*.google.ae/*", "*://*.google.com.af/*",
|
||||||
|
"*://*.google.com.ag/*", "*://*.google.com.ai/*",
|
||||||
|
"*://*.google.al/*", "*://*.google.am/*",
|
||||||
|
"*://*.google.co.ao/*", "*://*.google.com.ar/*",
|
||||||
|
"*://*.google.as/*", "*://*.google.at/*",
|
||||||
|
"*://*.google.com.au/*", "*://*.google.az/*",
|
||||||
|
"*://*.google.ba/*", "*://*.google.com.bd/*",
|
||||||
|
"*://*.google.be/*", "*://*.google.bf/*",
|
||||||
|
"*://*.google.bg/*", "*://*.google.com.bh/*",
|
||||||
|
"*://*.google.bi/*", "*://*.google.bj/*",
|
||||||
|
"*://*.google.com.bn/*", "*://*.google.com.bo/*",
|
||||||
|
"*://*.google.com.br/*", "*://*.google.bs/*",
|
||||||
|
"*://*.google.bt/*", "*://*.google.co.bw/*",
|
||||||
|
"*://*.google.by/*", "*://*.google.com.bz/*",
|
||||||
|
"*://*.google.ca/*", "*://*.google.cd/*",
|
||||||
|
"*://*.google.cf/*", "*://*.google.cg/*",
|
||||||
|
"*://*.google.ch/*", "*://*.google.ci/*",
|
||||||
|
"*://*.google.co.ck/*", "*://*.google.cl/*",
|
||||||
|
"*://*.google.cm/*", "*://*.google.cn/*",
|
||||||
|
"*://*.google.com.co/*", "*://*.google.co.cr/*",
|
||||||
|
"*://*.google.com.cu/*", "*://*.google.cv/*",
|
||||||
|
"*://*.google.com.cy/*", "*://*.google.cz/*",
|
||||||
|
"*://*.google.de/*", "*://*.google.dj/*",
|
||||||
|
"*://*.google.dk/*", "*://*.google.dm/*",
|
||||||
|
"*://*.google.com.do/*", "*://*.google.dz/*",
|
||||||
|
"*://*.google.com.ec/*", "*://*.google.ee/*",
|
||||||
|
"*://*.google.com.eg/*", "*://*.google.es/*",
|
||||||
|
"*://*.google.com.et/*", "*://*.google.fi/*",
|
||||||
|
"*://*.google.com.fj/*", "*://*.google.fm/*",
|
||||||
|
"*://*.google.fr/*", "*://*.google.ga/*",
|
||||||
|
"*://*.google.ge/*", "*://*.google.gg/*",
|
||||||
|
"*://*.google.com.gh/*", "*://*.google.com.gi/*",
|
||||||
|
"*://*.google.gl/*", "*://*.google.gm/*",
|
||||||
|
"*://*.google.gp/*", "*://*.google.gr/*",
|
||||||
|
"*://*.google.com.gt/*", "*://*.google.gy/*",
|
||||||
|
"*://*.google.com.hk/*", "*://*.google.hn/*",
|
||||||
|
"*://*.google.hr/*", "*://*.google.ht/*",
|
||||||
|
"*://*.google.hu/*", "*://*.google.co.id/*",
|
||||||
|
"*://*.google.ie/*", "*://*.google.co.il/*",
|
||||||
|
"*://*.google.im/*", "*://*.google.co.in/*",
|
||||||
|
"*://*.google.iq/*", "*://*.google.is/*", "*://*.google.it/*",
|
||||||
|
"*://*.google.je/*", "*://*.google.com.jm/*",
|
||||||
|
"*://*.google.jo/*", "*://*.google.co.jp/*",
|
||||||
|
"*://*.google.co.ke/*", "*://*.google.com.kh/*",
|
||||||
|
"*://*.google.ki/*", "*://*.google.kg/*",
|
||||||
|
"*://*.google.co.kr/*", "*://*.google.com.kw/*",
|
||||||
|
"*://*.google.kz/*", "*://*.google.la/*",
|
||||||
|
"*://*.google.com.lb/*", "*://*.google.li/*",
|
||||||
|
"*://*.google.lk/*", "*://*.google.co.ls/*",
|
||||||
|
"*://*.google.lt/*", "*://*.google.lu/*", "*://*.google.lv/*",
|
||||||
|
"*://*.google.com.ly/*", "*://*.google.co.ma/*",
|
||||||
|
"*://*.google.md/*", "*://*.google.me/*", "*://*.google.mg/*",
|
||||||
|
"*://*.google.mk/*", "*://*.google.ml/*",
|
||||||
|
"*://*.google.com.mm/*", "*://*.google.mn/*",
|
||||||
|
"*://*.google.ms/*", "*://*.google.com.mt/*",
|
||||||
|
"*://*.google.mu/*", "*://*.google.mv/*", "*://*.google.mw/*",
|
||||||
|
"*://*.google.com.mx/*", "*://*.google.com.my/*",
|
||||||
|
"*://*.google.co.mz/*", "*://*.google.com.na/*",
|
||||||
|
"*://*.google.com.nf/*", "*://*.google.com.ng/*",
|
||||||
|
"*://*.google.com.ni/*", "*://*.google.ne/*",
|
||||||
|
"*://*.google.nl/*", "*://*.google.no/*",
|
||||||
|
"*://*.google.com.np/*", "*://*.google.nr/*",
|
||||||
|
"*://*.google.nu/*", "*://*.google.co.nz/*",
|
||||||
|
"*://*.google.com.om/*", "*://*.google.com.pa/*",
|
||||||
|
"*://*.google.com.pe/*", "*://*.google.com.pg/*",
|
||||||
|
"*://*.google.com.ph/*", "*://*.google.com.pk/*",
|
||||||
|
"*://*.google.pl/*", "*://*.google.pn/*",
|
||||||
|
"*://*.google.com.pr/*", "*://*.google.ps/*",
|
||||||
|
"*://*.google.pt/*", "*://*.google.com.py/*",
|
||||||
|
"*://*.google.com.qa/*", "*://*.google.ro/*",
|
||||||
|
"*://*.google.ru/*", "*://*.google.rw/*",
|
||||||
|
"*://*.google.com.sa/*", "*://*.google.com.sb/*",
|
||||||
|
"*://*.google.sc/*", "*://*.google.se/*",
|
||||||
|
"*://*.google.com.sg/*", "*://*.google.sh/*",
|
||||||
|
"*://*.google.si/*", "*://*.google.sk/*",
|
||||||
|
"*://*.google.com.sl/*", "*://*.google.sn/*",
|
||||||
|
"*://*.google.so/*", "*://*.google.sm/*",
|
||||||
|
"*://*.google.sr/*", "*://*.google.st/*",
|
||||||
|
"*://*.google.com.sv/*", "*://*.google.td/*",
|
||||||
|
"*://*.google.tg/*", "*://*.google.co.th/*",
|
||||||
|
"*://*.google.com.tj/*", "*://*.google.tk/*",
|
||||||
|
"*://*.google.tl/*", "*://*.google.tm/*",
|
||||||
|
"*://*.google.tn/*", "*://*.google.to/*",
|
||||||
|
"*://*.google.com.tr/*", "*://*.google.tt/*",
|
||||||
|
"*://*.google.com.tw/*", "*://*.google.co.tz/*",
|
||||||
|
"*://*.google.com.ua/*", "*://*.google.co.ug/*",
|
||||||
|
"*://*.google.co.uk/*", "*://*.google.com.uy/*",
|
||||||
|
"*://*.google.co.uz/*", "*://*.google.com.vc/*",
|
||||||
|
"*://*.google.co.ve/*", "*://*.google.vg/*",
|
||||||
|
"*://*.google.co.vi/*", "*://*.google.com.vn/*",
|
||||||
|
"*://*.google.vu/*", "*://*.google.ws/*",
|
||||||
|
"*://*.google.rs/*", "*://*.google.co.za/*",
|
||||||
|
"*://*.google.co.zm/*", "*://*.google.co.zw/*",
|
||||||
|
"*://*.google.cat/*"],
|
||||||
|
"js": [
|
||||||
|
"core_js/google_link_fix.js"
|
||||||
|
],
|
||||||
|
"run_at": "document_end"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"options_ui": {
|
||||||
|
"page": "html/settings.html"
|
||||||
}
|
}
|
||||||
],
|
|
||||||
"options_ui": {
|
|
||||||
"page": "html/settings.html"
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user