Uncaught in promise error cannot access a chrome url

#google-chrome #google-chrome-extension #chrome-extension-manifest-v3

#google-chrome #google-chrome-extension #chrome-extension-manifest-v3

Вопрос:

Я слежу за тем, как начать работу с расширением chrome, которое опубликовано на официальном сайте chrome https://developer.chrome.com/docs/extensions/mv3/getstarted/

И я скопировал и вставил весь код и запустил его таким же образом. Но в моем случае, когда я запускаю chrome.scripting.executeScript , это вызывает "Uncaught (in promise) Error: Cannot access a chrome:// URL" ошибку.

Я не знаю, в чем проблема. Вот мой код, который был скопирован по ссылке выше.

  • манифест.json
 {
  "name": "Getting Started Example",
  "description": "Build an Extension!",
  "version": "1.0",
  "manifest_version": 3,
  "background": {
    "service_worker": "background.js"
  },
  "permissions": ["storage", "activeTab", "scripting"],
  "action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "/images/get_started16.png",
      "32": "/images/get_started32.png",
      "48": "/images/get_started48.png",
      "128": "/images/get_started128.png"
    }
  },
  "icons": {
    "16": "/images/get_started16.png",
    "32": "/images/get_started32.png",
    "48": "/images/get_started48.png",
    "128": "/images/get_started128.png"
  }
}
 
  • background.js
 let color = '#3aa757';

chrome.runtime.onInstalled.addListener(() => {
  chrome.storage.sync.set({ color });
  console.log(`default color: ${color}`);
});
 
  • popoup.js
 // Initialize button with user's preferred color
let changeColor = document.getElementById('changeColor');

chrome.storage.sync.get('color', ({ color }) => {
  changeColor.style.backgroundColor = color;
});

// When the button is clicked, inject setPageBackgroundColor into current page
changeColor.addEventListener('click', async () => {
  console.log('clicked');
  console.log(chrome.tabs);

  let [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
  console.log(tab);

  chrome.scripting.executeScript({
    target: { tabId: tab.id },
    function: setPageBackgroundColor,
  });
});

// The body of this function will be executed as a content script inside the
// current page
function setPageBackgroundColor() {
  chrome.storage.sync.get('color', ({ color }) => {
    document.body.style.backgroundColor = color;
  });
}
 
  • popup.html
 <!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="button.css" />
  </head>
  <body>
    <button id="changeColor"></button>
    <script src="popup.js"></script>
  </body>
</html>
 

У тебя есть идея??

Комментарии:

1. Не пойманный (в обещании) Ошибка: Не удается получить доступ к chrome:// URL» означает, что вы пытаетесь внедрить скрипт содержимого на страницы, URL которых начинается с chrome://. Это запрещено. Попробуйте сначала активировать веб-страницу, а затем снова нажмите значок действия.

2. @Robbi AMG, я понял. Я протестировал в chrome://расширение. Ты прав. Спасибо!

Ответ №1:

Когда вы пытаетесь запустить событие, убедитесь, что вы не участвуете chrome://extensions/ или в чем-то подобном.

Комментарии:

1. Я был на странице расширений, и, следовательно, произошла ошибка. это сработало для меня.

Discussion on: Chrome Extensions 101


Collapse

Expand


imcoderlg profile image

LG

A chess genius, a Gitpod expert, and an avid reader.

  • Location

    Earth

  • Joined

    Jun 28, 2021

Jun 28 ’21

  • Copy link

But when I run the extension, there are errors, like popup.html got some error but it doesn’t show it.
It just says this:
Uncaught (in promise) Error: Cannot access a chrome:// URL
Context
content/popup.html
Stack Trace
content/popup.html:0 (anonymous function)
Nothing to see here, move along.


Collapse

Expand


venkyakshaya profile image

Akshaya Venkatesh

Front End Enthusiast and Developer on most days. Mandala and Calligraphy Artist on others!

  • Location

    Ooty, India

  • Education

    BE Computer Science Engg

  • Work

    Senior Software Developer at Presidio Inc.

  • Joined

    Jul 19, 2020

Jun 28 ’21

  • Copy link

You may be trying to access the extension from a «chrome://» URL. Open a different tab and retry.


Collapse

Expand


imcoderlg profile image

LG

A chess genius, a Gitpod expert, and an avid reader.

  • Location

    Earth

  • Joined

    Jun 28, 2021

Jun 28 ’21

  • Copy link

Now it works! Thanks!

venkyakshaya profile image

Akshaya Venkatesh

Front End Enthusiast and Developer on most days. Mandala and Calligraphy Artist on others!

  • Location

    Ooty, India

  • Education

    BE Computer Science Engg

  • Work

    Senior Software Developer at Presidio Inc.

  • Joined

    Jul 19, 2020

Jun 28 ’21

  • Copy link

Yay! 😁😁

Распознавание ошибок — обычное дело для программистов и веб-мастеров, самостоятельно прописывающих программные коды для своих ресурсов. Но порой с сообщением Error сталкиваются обычные пользователи, не имеющие даже приблизительного понятия о том, как быть в сложившейся ситуации. И возникает ступор: что делать? То ли свои действия исправлять, то ли вызывать специалистов, то ли технику уже на свалку везти?

Ошибка Uncaught (in promise) может появляться при работе с JavaScript, браузерами, приложениями и даже мессенджерами. Для понимания причины значение имеет характеристика конкретного сбоя, выводимая после Error.

В любом случае, это ошибка, возникшая в кодировке асинхронной операции с использованием функции обратного вызова. Снижая производительность кода до нуля, формально она не является критичной и, при распознавании, легко устраняется. Однако диагностировать причину бывает крайне трудоемко — именно на это указывает термин Uncaught (“необработанная”). И разобраться с возникающей проблемой по силам только грамотному и внимательному мастеру. Новичку же лучше обратиться за подсказкой к более опытным коллегам.

Для решения проблемы разработчику, как правило, предстоит вручную перебирать все варианты, которые способны вызвать несоответствие и сбой, устраняя конфликт между поставленной задачей и возможностью ее исполнения.

На практике промисы создаются как раз для того, чтобы перехватить ошибку, понять, на каком именно участке кода она возникает. Если бы не использовался Promise, команда просто оставалась бы без исполнения, а пользователь пребывал в неведении: почему та или иная функция не срабатывает? Очевидно, что информирование существенно упрощает задачу и сокращает время на реставрацию процесса.

При определении ошибки, перебирая цепочки, находят функцию, нарушающую логику. Ее обработка приводит к восстановлению работы системы. По сути, promise — это объект, не идущий в систему, а возвращающий в исходную точку сообщение о том, насколько удачно прошла операция. Если же произошел сбой — то какова его вероятная причина.

В то же время многократное использование промисов, связанное с ожиданием ответа, замедляет работу ресурса, утяжеляет его. Поэтому злоупотреблять удобной конструкцией не следует, как бы ни хотелось. Решение заключается в том, чтобы выбрать наиболее важный (или наиболее уязвимый) связующий блок, и именно на него установить необходимый код промис.

Работа по диагностике и обработке ошибок

Собственно, работа по диагностике и обработке ошибок, возникающих при создании сайтов, приложений или даже текстов в редакторе, почти всегда идет по тому же алгоритму: простым перебором исключаешь ошибочные варианты, один за другим.

Наглядный тому пример — поиск ответа на вопрос, почему перестали работать сочетания клавиш Ctrl+C и Ctrl+V. Комбинации “горячих клавиш” могут отказаться реагировать на нажатие из-за заражения вирусом, загрязнения клавиатуры, целого ряда других факторов. Тестируя их один за другим, раньше или позже непременно выйдешь на истинную причину — и тогда уже сможешь ее устранить.

Аналогично необходимо действовать при возникновении ошибки Uncaught (in promise): проверяя строчку за строчкой, каждый показатель, находить неверное значение, направляющее не туда, куда планировалось, переписывать его и добиваться намеченной цели.

Если вы не являетесь разработчиком, не создаете авторских приложений, не владеете профессиональным языком и никогда не касались даже близко программных кодов, но столкнулись с ошибкой Uncaught (in promise), прежде всего проверьте технику на присутствие вирусов. Запущенный злоумышленниками вредитель мог покалечить вашу систему в своих интересах. Второй шаг — попытка восстановления системы в точке, где она благополучно работала ранее. Вспомните, какие обновления вы устанавливали в последнюю очередь, попытайтесь избавиться от них. Если речь не идет о создаваемой вами авторской программе, избавиться от ошибки поможет переустановка поврежденного приложения. Если не поможет и это — остается обратиться к специалисту, способному исправить кодировку. При этом знайте, что проблема — не в “железе”, а в сбое используемого вами программного обеспечения.

Понравилась статья? Поделить с друзьями:
  • Uncaught exception syntax error unexpected token
  • Uncaught exception error the specified module could not be found
  • Uncaught exception error spawn
  • Uncaught exception error ehlo not accepted from server
  • Uncaught exception error cannot find module