Расширение Chrome: Как преобразовать локальный файл HTML в URL для отображения? - PullRequest
0 голосов
/ 21 ноября 2018

В настоящее время я разрабатываю расширение для Chrome и пытаюсь превратить один из моих локальных файлов HTML в URL, чтобы я мог открыть его из своего скрипта содержимого.Я нашел одно решение:

chrome.tabs.create({url: chrome.extension.getURL('notes.html')});

Это не сработало.Некоторые люди сообщают, что контентные скрипты могут работать не со всеми API расширения Chrome.Мне нужно, чтобы эта функция работала из моего скрипта контента, чтобы она работала, когда мне это нужно.Я также нашел:

var urlChanged = window.url.createObjectURL("notes.html");
window.open(urlChanged);

Это тоже не сработало.Я закончил с попыткой:

var urlChanged = chrome.runtime.getURL("notes.html");
window.open(urlChanged);

Откроется новая вкладка, но я получаю только пустую страницу HTML.Мне было интересно, если кто-нибудь может дать мне некоторое представление о том, почему ни один из этих методов не может работать?

tl; dr Мой скрипт содержимого не хочет открывать и отображать локальный HTML-файл, который я создал.Я использовал несколько методов, чтобы попытаться открыть его, но файл не хочет открываться из сценария содержимого.Файл HTML находится в той же папке расширения, что и скрипт содержимого и manifest.json.Любая помощь с этим будет оценена!

1 Ответ

0 голосов
/ 21 ноября 2018
  • Чтобы открыть страницу вашего расширения с помощью window.open () в скрипте содержимого, вам нужно будет открыть его, используя web_accessible_resources в manifest.json.Это сделает ваше расширение доступным для обнаружения из Интернета.

    "web_accessible_resources": [
      "notes.html"
    ]
    

  • Лучшее решение - , чтобы отправить сообщение из скрипта контента в фоновый режим.скрипт, который может использовать chrome.tabs API для открытия вашей страницы расширения.

    Это лучшее решение, потому что window.open на вкладке веб-страницы может быть заблокировано анти-всплывающей политикой.А также потому, что вы не открываете страницы своего расширения в Интернете.

    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;
      }
    });
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...