Najczęstsze pytania

Jeśli nie znajdziesz tu odpowiedzi na swoje pytanie, zapoznaj się z najczęstszymi pytaniami dotyczącymi Chrome Web Store, tagiem [google-chrome-extension] na stronie Stack Overflow, grupą chromium-extensions lub pomocą dotyczącą sklepu.

Ogólne

Co to są rozszerzenia do Google Chrome?

Rozszerzenia do Google Chrome to aplikacje, które działają w przeglądarce Chrome i udostępniają dodatkowe funkcje, integrują się z witrynami lub usługami innych firm oraz umożliwiają dostosowanie przeglądarki do Twoich potrzeb.

Jak skonfigurować Chrome na potrzeby tworzenia rozszerzeń?

Jeśli używasz wersji Chrome, która obsługuje rozszerzenia, masz już wszystko, czego potrzebujesz, by zacząć pisać własne rozszerzenie. Zacznij od włączenia Trybu programisty.

Kliknij ikonę menu Chrome i z menu Narzędzia wybierz Rozszerzenia. Upewnij się, że zaznaczone jest pole wyboru „Tryb programisty” w prawym górnym rogu. Teraz możesz m.in. ponownie załadować rozszerzenia, wczytać rozpakowany katalog plików jak rozszerzenie w pakiecie. Pełny samouczek znajdziesz w sekcji Pierwsze kroki.

Jakich technologii używa się do tworzenia rozszerzeń do Chrome?

Rozszerzenia są napisane przy użyciu tych samych standardowych technologii internetowych, których deweloperzy używają do tworzenia witryn. HTML jest używany jako język znaczników treści, CSS służy do określania stylu, a JavaScript do tworzenia skryptów. Chrome obsługuje HTML5 i CSS3, więc deweloperzy mogą korzystać w rozszerzeniach z najnowszych otwartych technologii internetowych, takich jak canvas czy animacje CSS. Rozszerzenia mają też dostęp do kilku interfejsów API JavaScript, które pomagają wykonywać takie funkcje jak kodowanie JSON i interakcję z przeglądarką.

Czy rozszerzenia są pobierane z internetu przy każdym wczytaniu przeglądarki?

Rozszerzenia są pobierane przez przeglądarkę Chrome podczas instalacji, a następnie uruchamiane z dysku lokalnego, aby zwiększyć wydajność. Jeśli jednak nowa wersja rozszerzenia zostanie opublikowana online, zostanie ona automatycznie pobrana w tle dla wszystkich użytkowników, którzy mają to rozszerzenie. Rozszerzenia mogą też w dowolnym momencie wysyłać żądania dostępu do zdalnej zawartości, aby korzystać z usługi internetowej lub pobierać nowe treści z internetu.

Jak mogę ustalić, która wersja Chrome jest wdrożona w którym kanale?

Aby sprawdzić, która wersja Chrome jest obecnie dostępna na poszczególnych platformach, wejdź na omahaproxy.appspot.com. Zobaczysz dane w formacie podobnym do:

cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####

Każdy wiersz zawiera informacje o innej kombinacji platformy i kanału. Wymienione platformy to cf (Google Chrome Frame), linux, mac, win i cros (Google ChromeOS). Wymienione kanały to canary, dev, beta i stable. Dwie czteroczęściowe liczby po nazwie kanału reprezentują bieżącą i poprzednią wersję Chrome wdrożoną w danej kombinacji platformy i kanału. Pozostała część informacji to metadane dotyczące daty pierwszego przekazania wersji, a także numery wersji powiązane z każdą kompilacją.

Możliwości

Czy rozszerzenia mogą wysyłać żądania Ajax między domenami?

Tak. Rozszerzenia mogą wysyłać żądania między domenami. Więcej informacji znajdziesz na tej stronie.

Czy rozszerzenia mogą korzystać z usług internetowych innych firm?

Tak. Rozszerzenia są w stanie wysyłać żądania Ajax między domenami, dzięki czemu mogą bezpośrednio wywoływać zdalne interfejsy API. Szczególnie łatwe w użyciu są interfejsy API, które udostępniają dane w formacie JSON.

Czy rozszerzenia mogą kodować/dekodować dane JSON?

Tak. Ponieważ V8 (mechanizm JavaScript w Chrome) natywnie obsługuje pliki JSON.stringify i JSON.parse, możesz używać tych funkcji w rozszerzeniach w sposób opisany tutaj bez dodawania do kodu dodatkowych bibliotek JSON.

Czy rozszerzenia mogą przechowywać dane lokalnie?

Tak. Rozszerzenia mogą używać obiektu localStorage do trwałego przechowywania danych ciągu znaków. Za pomocą wbudowanych funkcji JSON w Chrome możesz przechowywać złożone struktury danych w pamięci lokalnej (localStorage). Na potrzeby rozszerzeń, które muszą wykonywać zapytania SQL na przechowywanych danych, Chrome implementuje bazy danych SQL po stronie klienta, z których można też korzystać.

Czy rozszerzenia mogą używać protokołu OAuth?

Tak, istnieją rozszerzenia, które korzystają z protokołu OAuth do uzyskiwania dostępu do interfejsów API danych zdalnych. Większość programistów uważa, że korzystanie z biblioteki JavaScriptu OAuth ułatwia proces podpisywania żądań OAuth.

Czy rozszerzenia mogą tworzyć UI poza renderowaną stroną internetową?

Tak, rozszerzenie może dodawać przyciski do interfejsu przeglądarki Chrome. Więcej informacji znajdziesz w artykułach dotyczących działań przeglądarki i działań na stronie.

Rozszerzenie może też tworzyć wyskakujące powiadomienia, które istnieją poza oknem przeglądarki. Więcej informacji znajdziesz w dokumentacji powiadomień na pulpicie.

Czy rozszerzenia mogą wykrywać kliknięcia kart Chrome i przycisków nawigacyjnych?

Nie. Rozszerzenia ograniczają się do nasłuchiwania zdarzeń opisanych w dokumentacji interfejsu API.

Czy 2 rozszerzenia mogą się ze sobą komunikować?

Tak, rozszerzenia mogą przekazywać komunikaty do innych rozszerzeń. Więcej informacji znajdziesz w dokumentacji dotyczącej przekazywania wiadomości.

Czy rozszerzenia mogą korzystać z Google Analytics?

Tak. Rozszerzenia są tworzone tak samo jak witryny, więc mogą śledzić wykorzystanie za pomocą Google Analytics. Zmodyfikuj jednak kod śledzenia tak, aby pobierał wersję HTTPS biblioteki Google Analytics. Więcej informacji na ten temat znajdziesz w tym samouczku.

Czy rozszerzenia mogą modyfikować adresy URL chrome://?

Nie. Interfejsy API rozszerzeń zostały zaprojektowane w taki sposób, aby zminimalizować problemy ze zgodnością wsteczną, które mogą się pojawić po wypchnięciu nowych wersji przeglądarki. Jeśli zezwolisz na skrypty treści pod adresami URL chrome://, deweloperzy zaczęliby polegać na tych stronach DOM, CSS i JavaScript. W najlepszym przypadku nie udało się zaktualizować tych stron tak szybko, jak są one teraz aktualizowane. W najgorszym razie może to oznaczać, że aktualizacja jednej z tych stron może spowodować awarię rozszerzenia, powodując, że jego najważniejsze części przestaną działać.

Całkowite zastępowanie treści hostowanych pod tymi adresami URL jest dozwolone, ponieważ zmuszono dewelopera rozszerzenia do zaimplementowania wszystkich funkcji, które są mu potrzebne, bez uzależnienia od wewnętrznej implementacji przeglądarki.

Czy rozszerzenia mogą otwierać wyskakujące okienka działań w przeglądarce lub na stronie bez interakcji użytkownika?

Nie. Wyskakujące okienka mogą się otwierać tylko wtedy, gdy użytkownik kliknie odpowiednią stronę lub odpowiednią czynność w przeglądarce. Rozszerzenie nie może automatycznie otworzyć wyskakującego okienka.

Czy rozszerzenia pozwalają utrzymać wyskakujące okienka, gdy użytkownik je kliknie?

Nie. Wyskakujące okienka zamykają się automatycznie, gdy użytkownik znajdzie poza nim część okna przeglądarki. Nie można zamknąć wyskakującego okienka, gdy użytkownik je kliknie.

Czy rozszerzenia można powiadamiać o ich zainstalowaniu/odinstalowaniu?

Możesz nasłuchiwać zdarzenia runtime.onInstalled, aby otrzymywać powiadomienia o instalacji lub aktualizacji rozszerzenia albo o zaktualizowaniu samej przeglądarki Chrome. Odinstalowanie rozszerzenia nie odpowiada zdarzeniu.

Programowanie

Jak utworzyć interfejs użytkownika rozszerzenia?

Rozszerzenia wykorzystują kod HTML i CSS do definiowania swoich interfejsów użytkownika, więc możesz używać standardowych elementów sterujących formularza do utworzenia UI lub stylu interfejsu za pomocą CSS, tak jak w przypadku strony internetowej. Poza tym rozszerzenia mogą dodawać do Chrome pewne ograniczone elementy interfejsu.

Ile danych mogę przechowywać w pamięci lokalnej?

Rozszerzenia mogą przechowywać do 5 MB danych w pamięci lokalnej.

Jak utworzyć menu opcji dla mojej aplikacji?

Jeśli chcesz, aby użytkownicy mogli ustawiać opcje rozszerzenia, utwórz stronę opcji, czyli prostą stronę HTML, która będzie wczytywana po kliknięciu przez użytkownika przycisku „Opcje” dotyczącego rozszerzenia. Strona ta może odczytywać i zapisywać ustawienia w pamięci lokalnej, a nawet wysyłać opcje na serwer WWW, aby zachować je w różnych przeglądarkach.

Jakie narzędzia do debugowania są dostępne dla programistów rozszerzeń?

Wbudowane w Chrome narzędzia dla programistów mogą służyć do debugowania rozszerzeń i stron internetowych. Więcej informacji znajdziesz w tym samouczku na temat debugowania rozszerzeń.

Dlaczego dopasowania symboli wieloznacznych nie działają w przypadku domen najwyższego poziomu (TLD)?

Nie możesz używać wzorców dopasowania symboli wieloznacznych, takich jak http://google.*/*, do dopasowywania domen najwyższego poziomu (takich jak http://google.es czy http://google.fr) ze względu na złożoność takiego ograniczania dopasowania tylko do wybranych domen.

W przypadku przykładu http://google.*/* dopasowane zostaną domeny Google, ale tak samo jak http://google.someotherdomain.com. Poza tym wiele witryn nie ma wszystkich domen najwyższego poziomu w swojej domenie. Załóżmy na przykład, że chcesz dopasować http://example.com i http://example.es za pomocą http://example.*/*, ale http://example.net jest witryną wrogą. Jeśli w rozszerzeniu występuje błąd, szkodliwa witryna może je zaatakować, by uzyskać dostęp do zwiększonych uprawnień rozszerzenia.

Domeny najwyższego poziomu, w których chcesz uruchomić rozszerzenie, musisz wyraźnie wskazać.

Dlaczego interfejs API zarządzania nie uruchamia zdarzeń, gdy moje rozszerzenie zostało zainstalowane/odinstalowane?

Interfejs API zarządzania ma pomagać w tworzeniu nowych rozszerzeń zastępujących karty. Nie miało to na celu uruchamiania zdarzeń instalacji i odinstalowywania obecnego rozszerzenia.

Jak rozszerzenie może określić, czy jest ono uruchomione po raz pierwszy?

Możesz nasłuchiwać zdarzenia runtime.onInstalled. Zapoznaj się z tym artykułem z najczęstszymi pytaniami.

Funkcje i błędy

Chyba znalazłem błąd! Jak mogę się upewnić, że problem został rozwiązany?

Podczas tworzenia rozszerzenia możesz zauważyć zachowanie niezgodne z dokumentacją rozszerzeń i być spowodowane błędem w Chrome. W takiej sytuacji prześlij odpowiednie zgłoszenie, a zespół Chromium dysponuje wystarczającą ilością informacji, by odtworzyć problem.

Aby się upewnić, że:

  1. Stwórz minimalne rozszerzenie testowe, które pozwoli zademonstrować zgłaszany problem. Rozszerzenie powinno zawierać jak najmniejszą liczbę wierszy kodu, aby zademonstrować błąd – zazwyczaj nie więcej niż 100 wierszy. Deweloperzy często nie są w stanie odtworzyć w ten sposób problemu, co wskazuje na to, że błąd tkwi w ich własnym kodzie.
  2. Przeszukaj rejestr zgłoszeń na http://crbug.com, by sprawdzić, czy ktoś już nie zgłosił podobnego problemu. Większość problemów związanych z rozszerzeniami zgłaszamy w sekcji component=Platforma>Rozszerzenia, więc jeśli chcesz znaleźć błąd rozszerzenia związany np. z funkcją chrome.tabs.executeScript, wyszukaj „component=Platform>Extensions Type=Bug chrome.tabs.executeScript”, co spowoduje wyświetlenie tej listy wyników.
  3. Jeśli znajdziesz błąd, który opisuje Twój problem, kliknij ikonę gwiazdki, by otrzymać powiadomienie, gdy zostanie zaktualizowana aktualizacja. Nie odpowiadaj na zgłoszenia typu „ja też” ani nie pytaj „kiedy to naprawimy?”. Takie aktualizacje mogą spowodować wysłanie setek e-maili. Dodaj komentarz tylko wtedy, gdy masz informacje (np. lepszy przypadek testowy lub sugerowaną poprawkę), które mogą być przydatne.
  4. Jeśli nie znajdziesz odpowiedniego błędu do oznaczenia gwiazdką, prześlij nowe zgłoszenie problemu na stronie http://crbug.com/new. W formularzu podaj jak najwięcej szczegółów: wybierz opisowy tytuł, objaśnij czynności, jakie należy wykonać, aby odtworzyć błąd, oraz opisz oczekiwane i rzeczywiste zachowanie. Dołącz do raportu przykład testowy i w razie potrzeby zrzuty ekranu. Im łatwiej inni użytkownicy odtworzą Twój problem, tym większa szansa, że zostanie on niezwłocznie naprawiony.
  5. Poczekaj, aż błąd zostanie zaktualizowany. Większość nowych błędów jest klasyfikowana w ciągu tygodnia, ale czasem aktualizacja może potrwać dłużej. Nie odpowiadaj na zgłoszenie o błędzie z pytaniem, kiedy problem zostanie rozwiązany. Jeśli zgłoszenie nie zostanie zmodyfikowane w ciągu 2 tygodni, opublikuj na grupie dyskusyjnej wiadomość z linkiem do niego.
  6. Jeśli błąd został przez Ciebie zgłoszony na grupie dyskusyjnej i przekierowany do tego artykułu z najczęstszymi pytaniami, odpowiedz w pierwotnym wątku, podając link do błędu oznaczonego gwiazdką lub zgłoszonego. Dzięki temu inne osoby, które mają ten sam problem, będą mogły łatwiej znaleźć rozwiązanie.

Mam prośbę o dodanie funkcji. Jak mogę to zgłosić?

Jeśli znajdziesz funkcję (zwłaszcza związaną z eksperymentalnym interfejsem API), którą można dodać w celu usprawnienia procesu tworzenia rozszerzeń, upewnij się, że w narzędziu do śledzenia problemów zgłoszono odpowiednie żądanie.

Aby się upewnić, że:

  1. Przeszukaj rejestr zgłoszeń na http://crbug.com, by sprawdzić, czy ktoś nie poprosił o podobną funkcję. Większość żądań związanych z rozszerzeniami jest zgłaszana w sekcji component=Platforma>Rozszerzenia. Aby znaleźć żądanie funkcji rozszerzenia związane np. ze skrótami klawiszowymi, wyszukaj „component=Platform>Extensions Type=Feature shortcuts”, gdzie znajdziesz tę listę wyników.
  2. Jeśli znajdziesz zgłoszenie pasujące do żądania, kliknij ikonę gwiazdki, aby otrzymać powiadomienie, gdy błąd zostanie zaktualizowany. Nie odpowiadaj na zgłoszenia typu „Ja też” ani nie pytaj „kiedy wprowadzimy te zmiany?”. Takie aktualizacje mogą spowodować wysłanie setek e-maili.
  3. Jeśli nie znajdziesz odpowiedniego zgłoszenia do oznaczenia gwiazdką, prześlij nowe zgłoszenie na stronie http://crbug.com/new. W tym formularzu podaj jak najwięcej szczegółów: wybierz opisowy tytuł i wyjaśnij dokładnie, jakiej funkcji chcesz używać i jak będziesz z niej korzystać.
  4. Poczekaj na zaktualizowanie zgłoszenia. Większość nowych żądań jest klasyfikowana w ciągu tygodnia, ale czasami aktualizacja może potrwać dłużej. Nie odpowiadaj na zgłoszenie z pytaniem, kiedy funkcja zostanie dodana. Jeśli zgłoszenie nie zostanie zmienione w ciągu 2 tygodni, opublikuj wiadomość z linkiem do prośby na grupie dyskusyjnej.
  5. Jeśli zgłoszenie zostało przez Ciebie zgłoszone w grupie dyskusyjnej i przekierowano Cię do tego posta z najczęstszymi pytaniami, odpowiedz w pierwotnym wątku, podając link do zgłoszenia oznaczonego gwiazdką lub otwartego. Ułatwi to innym osobom, które przesłały tę samą prośbę, znalezienie odpowiedniego zgłoszenia.