/ / tabs.executeScript: Brak dostępu do chrome: // URL - javascript, google-chrome, google-chrome-extension

tabs.executeScript: nie można uzyskać dostępu do chrome: // URL - javascript, google-chrome, google-chrome-extension

chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
chrome.tabs.update(null, {url: "https://example.com/"});
});

powyższy kod działa, gdy uruchamiam, gdy mój pasek adresu ma coś, co oznacza, że ​​jestem na każdej stronie internetowej, ale kiedy uruchamiam, gdy mój pasek adresu jest pusty, dostaję poniżej błędu:

Unchecked runtime.lastError while running tabs.executeScript: Cannot access a chrome:// URL
at Object.callback

Odpowiedzi:

1 dla odpowiedzi № 1
  • Zwykle (patrz także Programowe wtryskiwanie w dokumentach) nie można wstrzykiwać skryptów do zakładek chrome:// adresy URL, ponieważ dozwolone schematy<scheme> := "*" | "http" | "https" | "file" | "ftp".

    W Chrome przed wersją v61 nadal było możliwe wstrzyknięcie do ramki zawartości strony Nowa karta, gdzie "pusty pasek adresu", o którym wspomniałeś, jest reprezentowany wewnętrznie jako chrome://newtab/. Na przykład główna ramka ma taki adres: https://www.google.com/_/chrome/newtab?espv=2&es_th=1&ie=utf-8 (użyj panelu Sieć w devtools, aby sprawdzić adresy URL). Więc twój manifest.json miałby "permissions": ["tabs", "https://www.google.com/_/chrome/newtab*"],

  • Alternatywnie możesz włączyć chrome://flags/#extensions-on-chrome-urls flaga, jednak nie jest to przydatne, ponieważ Chrome wyświetli ostrzeżenie przy każdym uruchomieniu.