Chrome 扩展 - Manifest V3 URL 捕获

问题描述 投票:0回答:1

我在使用 regexFilter 捕获 URL 并将其重定向到扩展页面时遇到问题。在 Chrome 上,我最终遇到了损坏的 URL 和无限的重定向循环。在勇敢的情况下,我收到 ERR_BLOCKED_BY_CLIENT。我正在尝试捕获任何 MPEG-DASH 或 HLS 流 URL 以在扩展程序中播放它。 服务人员看起来像这样:

var enabled = true;

var extension_page = chrome.runtime.getURL('/index.html');
var substitution = extension_page + "#\\0"

var rules = [{
  id: 1,
  action: {
    type: 'redirect',
    redirect: { regexSubstitution: substitution },
  },
  condition: {
    regexFilter: '^https?://.*/(.*\\.m3u8?|.*\\.mpd|Manifest).*',
    resourceTypes: ['main_frame', 'sub_frame'],
  },
}];

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request == "getState") {
        sendResponse(enabled);
        return;
    }
      
    enabled = request == "ENABLE";
    enabled ? chrome.action.setIcon({path: "assets/icon128.png" }) : chrome.action.setIcon({ path:"assets/icon128grey.png" });

    if(true === enabled) {
        chrome.declarativeNetRequest.updateDynamicRules({
            removeRuleIds: rules.map(r => r.id),
            addRules: rules,
        });
    } else {
        chrome.declarativeNetRequest.updateDynamicRules(chrome.declarativeNetRequest.updateDynamicRules({
            removeRuleIds: rules.map(r => r.id)
        }));
    }
});

chrome.declarativeNetRequest.updateDynamicRules({
    removeRuleIds: rules.map(r => r.id),
    addRules: rules,
});

manifest.json 看起来像这样

{
    "name": "Native MPEG-Dash + HLS Playback",
    "version": "5.0.0",
    "description": "Allow the browser to play HLS (m3u8) or MPEG-Dash (mpd) video urls 'natively'",
    "manifest_version": 3,
    "icons": { "128": "assets/icon128.png" },
    "background": { 
        "service_worker": "new_service_worker.js",
        "type": "module"
    },
    "permissions": [
        "tabs",
        "declarativeNetRequest",
        "storage"
    ],
    "host_permissions": [
        "<all_urls>"
    ],
    "options_ui": {
        "page": "options.html"
    },
    "action": {
        "default_title": "Native MPEG-Dash + HLS Playback",
        "default_icon": "assets/icon128.png",
        "default_popup": "popup.html"
    }
}

使用一个示例,我最终得到了极其错误的重定向循环:

https://dash.akamaized.net/akamai/bbb_30fps/bbb_30fpschrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#chrome-extension://iepdffliopgmnnmohpmdhclhdhkoonea/index.html#.mpd

在 Brave 上,我最终遇到了 ERR_BLOCKED_BY_CLIENT。此外,将流媒体 URL 直接粘贴到 Brave 地址栏也可以。

此解决方案位于 通过 declarativeNetRequest + extensionPath 重定向时获取原始 URL

我尝试了不同的正则表达式变体,但没有成功。

javascript google-chrome-extension
1个回答
0
投票

所以我发现,尽管我完全删除并重新安装了扩展程序,但还是有一些旧规则在微风中飘扬。所以不要自己做这件事

var rules = [{
  id: 2,
  action: {
    type: 'redirect',
    redirect: { regexSubstitution: substitution },
  },
  condition: {
    regexFilter: '^https?://.*/.*\\.m3u8?|.*\\.mpd|Manifest.*',
    resourceTypes: ['main_frame', 'sub_frame'],
  },
}];

chrome.declarativeNetRequest.updateDynamicRules({
    removeRuleIds: rules.map(r => r.id),
    addRules: rules,
});

我使用 getDynamicRules 删除了之前的所有规则,然后添加了正确的规则

chrome.declarativeNetRequest.getDynamicRules().then(function(oldRules) {
    chrome.declarativeNetRequest.updateDynamicRules({
        removeRuleIds: oldRules.map(r => r.id),
        addRules: rules,
    });

    console.log(chrome.declarativeNetRequest.getDynamicRules());
});

我在重定向时仍然遇到 ERR_BLOCKED_BY_CLIENT。

编辑

按照此处的建议添加 web_accessible_resources 解决了 ERR_BLOCKED_BY_CLIENT Chrome 阻止重定向到扩展页面

"web_accessible_resources": [{ 
    "resources": [ "/index.html" ],
    "matches": [ "<all_urls>" ]
}]
© www.soinside.com 2019 - 2024. All rights reserved.