Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展:如何将本地HTML文件转换为URL以显示?_Javascript_Url_Google Chrome Extension - Fatal编程技术网

Javascript Chrome扩展:如何将本地HTML文件转换为URL以显示?

Javascript Chrome扩展:如何将本地HTML文件转换为URL以显示?,javascript,url,google-chrome-extension,Javascript,Url,Google Chrome Extension,我目前正在开发一个chrome扩展,并试图将我的一个本地HTML文件制作成一个URL,这样我就可以从我的内容脚本中打开它。我找到的一个解决方案是: chrome.tabs.create({url: chrome.extension.getURL('notes.html')}); 但这并不奏效。一些人报告说,内容脚本可能无法与所有的chrome扩展API一起工作。我需要这个功能从我的内容脚本工作,但,以确保它将在我需要时启动。我还发现: var urlChanged = window.url.c

我目前正在开发一个chrome扩展,并试图将我的一个本地HTML文件制作成一个URL,这样我就可以从我的内容脚本中打开它。我找到的一个解决方案是:

chrome.tabs.create({url: chrome.extension.getURL('notes.html')});
但这并不奏效。一些人报告说,内容脚本可能无法与所有的chrome扩展API一起工作。我需要这个功能从我的内容脚本工作,但,以确保它将在我需要时启动。我还发现:

var urlChanged = window.url.createObjectURL("notes.html");
window.open(urlChanged);
这也不管用。我最后尝试:

var urlChanged = chrome.runtime.getURL("notes.html");
window.open(urlChanged);
一个新的选项卡打开,但我只得到一个空白的HTML页面。我想知道是否有人能告诉我为什么这些方法都不起作用

tl;dr My content script不希望打开和显示我创建的本地HTML文件。我使用了多种方法尝试打开它,但该文件不希望从内容脚本打开。HTML文件与内容脚本和manifest.json位于同一扩展文件夹中。在此方面的任何帮助都将不胜感激

  • 要通过内容脚本中的window.open()打开扩展的页面,您必须在manifest.json中公开它。它将使您的扩展可以从web上检测到

    "web_accessible_resources": [
      "notes.html"
    ]
    

  • 更好的解决方案是将消息从内容脚本发送到后台脚本,后台脚本可以使用chrome.tabs API打开扩展页面

    这是一个更好的解决方案,因为网页选项卡上的window.open可能会被反弹出策略阻止。而且还因为您不向web公开扩展的页面

    manifest.json应声明后台脚本:

    "background": {
      "scripts": ["background.js"],
      "persistent": false
    }
    
    内容脚本只发送一条消息:

    chrome.runtime.sendMessage({action: 'openNotes'});
    
    background.js完成以下工作:

    chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
      switch (msg.action) {
        case 'openNotes':
          chrome.tabs.create({
            url: '/notes.html',
            active: true,
            index: sender.tab.index + 1,
            openerTabId: sender.tab.id,
          });
          return;
      }
    });