В Chrome Расширение , Как предотвратить перенаправление страницы при нажатии на тег <a> - PullRequest
0 голосов
/ 08 января 2020

У меня есть chrome расширение.

То, что я хочу, это:

Когда на странице щелкают тег <a> (с именем A), я использую chrome.webRequest.onBeforeRequest, чтобы заблокировать запрос.

Вопрос:

Я пробовал и {redirectUrl: 'javascript:'}, и {cancel: true}, но страница А все еще перенаправлена.

Как я могу предотвратить перенаправление в chrome расширении.

манифест. json:

{
  "background": {
    "page": "background.html"
  },
  "browser_action": {
    "default_icon": "img/19.png",
    "default_popup": "popup.html",
    "default_title": "test"
  },
  "icons": {
    "128": "img/128.png",
    "48": "img/48.png"
  },
  "is_account_related": false,
  "manifest_version": 2,
  "minimum_chrome_version": "38.0.0.0",
  "permissions": ["webRequest", "webRequestBlocking", "notifications", "tabs", "storage", "cookies", "http://*/*", "https://*/*", "*://*/*"],
  "homepage_url": "xxxx",
  "name": "test",
  "description": "test",
  "version": "10.3.6",
  "content_security_policy": "script-src 'self' 'unsafe-eval' xxx 'unsafe-inline'; object-src 'self'",
  "key": "xxx"
}

background. html

chrome.webRequest.onBeforeRequest.addListener(
        function (details) {
            console.log('========start============');
            console.log('block', details, details.url);
            console.log('========end============');
            // return { redirectUrl: 'javascript:' };
            return { cancel: true };
        },
        { urls: ["*://developer.mozilla.org/*"] },
        ['blocking']
    );

В фоновом режиме. html, журнал правильный. Но страница все еще перемещается

=== update

Я считаю, что страница использует history API для навигации. Так есть ли способ предотвратить history API, как history.push, history.replace?

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Убедитесь, что у вас есть соответствующие разрешения в манифесте, как указано в документах

Поскольку эта функция использует обработчик событий блокировки, для нее требуется "webRequest", а также "webRequestBlocking". "разрешение в файле манифеста.

Также вы можете попробовать что-то вроде

chrome.webRequest.onBeforeRequest.addListener(
    function(details) { return {cancel: true}; },
     {urls: ["<all_urls>"]},
     ["blocking"]);
0 голосов
/ 08 января 2020

Вы также можете return false; каждый раз, когда <a> нажимается так:

for(elem of  document.getElementsByTagName("a")){
    elem.onclick = () => false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...