#javascript #google-chrome-extension
#javascript #google-chrome-расширение
Вопрос:
Я борюсь с поведением chrome.tabs.create()
.
Вот чего я надеюсь достичь: после нажатия кнопки приложение может получить URL-адрес, а затем создать новую вкладку на основе messageUrl
только что извлеченного.
Заранее спасибо!
Вот мой код (не работает)
popup.html
<!DOCTYPE html> <html> <style type="text/css"></style> <body style="width: 200px;"> <form> <button id="myButton">Open a random url</button> <script type="text/javascript" src="popup.js"></script> </form> </body> </html>
popup.js
document.addEventListener('DOMContentLoaded', documentEvents, false); // fetch a URL and return a string (which is also a URL) async function getMessageUrl() { const res = await fetch('https://dog.ceo/api/breeds/image/random'); const json = await res.json(); return await json['message']; } async function openImageUrl() { const messageUrl = await getMessageUrl(); chrome.tabs.create({ url: messageUrl }); } function documentEvents() { document.getElementById('myButton').addEventListener('click', function () { openImageUrl(); }); }
Комментарии:
1. document.getElementById(‘MyButton’) где находится MyButton?
2. Привет @NadiaChibrikova, извините, это была опечатка. Я это исправил!
Ответ №1:
Плохие новости: похоже, вы не можете ожидать асинхронных вызовов внутри всплывающего окна. Хорошие новости: вы можете ожидать их в фоновом скрипте, поэтому вы можете переместить туда свою функцию и вызвать ее из всплывающего окна следующим образом
chrome.extension.getBackgroundPage().openImageUrl();