微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未经检查的 runtime.lastError:无法访问 url "" 的内容扩展清单必须请求访问此主机的权限在清单 3 中

如何解决未经检查的 runtime.lastError:无法访问 url "" 的内容扩展清单必须请求访问此主机的权限在清单 3 中

请帮帮我!我收到错误“未经检查的 runtime.lastError:无法访问 url 的内容”“。扩展清单必须请求访问此主机的权限。”和“未检查的 runtime.lastError:无法建立连接。接收端不存在。”在清单 3 中。

来自内容脚本的监听器

chrome.runtime.onMessage.addListener(
function(req,sender,sendResponse) {
    if(req.msg === "analysis background") {
        let obj = parse();
        sendResponse(obj);
    }
        
    return true;
}
); 
); 

manifest.json

{
    "manifest_version": 3,"name": "extensionParser","version": "1.0.0","action": { 
        "default_popup": "popups/popup.html"
      },"background": {
        "service_worker": "background.js"
    },"permissions": ["tabs","scripting","http://localhost/site_for_parsing"]
}

来自后台文件代码

const siteUrl = "http://localhost/site_for_parsing";

chrome.runtime.onConnect.addListener(port => {
    port.onMessage.addListener(msg => {
        if(msg.message === 'analysis') {
            chrome.tabs.create({active: false,url: siteUrl},tab => {
                chrome.scripting.executeScript({
                    target: {tabId:tab.id},files: ['dist/parser.js']
                },(results) => {
                    chrome.tabs.sendMessage(tab.id,{msg: "analysis background"},res => {
                        port.postMessage(res)
                        chrome.tabs.remove(tab.id)
                    })
                })
            });
        }

    });
});

解决方法

  1. 应将站点权限添加到 host_permissions,而不是 permissionsmore info
  2. 在 ManifestV3 中 create + executeScript 是 bugged,因此要么 a) 返回 ManifestV2 直到此问题得到修复或 b) 使用以下解决方法。

等待 URL 设置

(async () => {
  const tab = await chrome.tabs.create({url: 'https://www.example.com'});
  const tabId = tab.id;
  if (!tab.url) await onTabUrlUpdated(tabId);
  const results = await chrome.scripting.executeScript({
    target: {tabId},files: ['content.js'],});
  chrome.tabs.sendMessage(tabId,{msg: 'analysis background'},res => {
    port.postMessage(res);
    chrome.tabs.remove(tabId);
  });
})();

function onTabUrlUpdated(tabId) {
  return new Promise((resolve,reject) => {
    const onUpdated = (id,info) => id === tabId && info.url && done(true);
    const onRemoved = id => id === tabId && done(false);
    chrome.tabs.onUpdated.addListener(onUpdated);
    chrome.tabs.onRemoved.addListener(onRemoved);
    function done(ok) {
      chrome.tabs.onUpdated.removeListener(onUpdated);
      chrome.tabs.onRemoved.removeListener(onRemoved);
      (ok ? resolve : reject)();
    }
  });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。