Wpis z mikrobloga

Funkcje loadOneTab i loadURI w 2023 w Firefox Experimental API?

Używam Experimental API w moim prywatnym rozszerzeniu do Firefoksa.

Do tej pory używałem Firefox 102 ESR, ale planuję przejście na Firefox ESR 115. Jest już dostępna Firefox 115 Beta, więc zacząłem ją testować ze zwoim prywatnym rozszerzeniem.

Do tej pory, używałem wewnętrznym funkcji Firefoksa, jak loadOneTab and loadURI i działało to bardzo dobrze.

Funkcji loadOneTab używałem w taki sposób:

const placesURL = "chrome://browser/content/places/places.xhtml";

window.gBrowser.loadOneTab( placesURL, {

inBackground: false,

allowThirdPartyFixup: true,

relatedToCurrent : true,

#!$%@?: Services.scriptSecurityManager.#!$%@?()

} );

Ale funkcja loadOneTab już w ogóle nie istnieje w API wewnętrznym Firefoksa. Czym go zastąpić?

Znalazłem funkcję _createTab:

// window.gBrowser._createTab({ uriString: placesURL });
Ale funkcja _createTab zwraca błąd:

Uncaught Error: UserInteraction with id "browser.tabs.opening" was not initialized

```

...to chyba przez zabezpieczenie, żeby ta funkcja była wywołana tylko poprzez akcję użytkownika? A ja wywołuję tę funkcję wewnątrz `async function`.

Da się jakoś otworzyć nową kartę z poziomu Experimental API w Firefox 115 beta?

Bardzo bardzo tego potrzebuję. Naprawdę bardzo.

---

Funkcji `loadURI` używałem w taki sposób:

window.gBrowser.selectedBrowser.loadURI(linkGo, {#!$%@?: Services.scriptSecurityManager.#!$%@?()});

Funkcja `loadURI` wydaje się być nadal dostępne w wewnętrznym API Firefoksa, ale zwraca taki błąd:
TypeError: 'uri' member of CancelContentJSOptions is not an object. RemoteWebNavigation.sys.mjs:28:41

```

Jak pokonać ten błąd?

#firefox #addons #webextensions #experimental #api
  • 1
  • 0
Znalazłem rozwiązanie w kodzie źródłowym Firefoksa - loadTabs.

Zamiast loadOneTab użyłem tego:

window.gBrowser.loadTabs( [linkGo] , {
inBackground: event.target.inBackground,
relatedToCurrent: true,
allowThirdPartyFixup: true,
#!$%@?: Services.scriptSecurityManager.#!$%@?()
} );

---

Zamiast loadURI użyłem tego:

window.gBrowser.loadTabs([linkGo], {
replace: true,
allowThirdPartyFixup: true,
#!$%@?: Services.scriptSecurityManager.#!$%@?()
});

...kluczowe jest replace: true, dzięki któremu URI otwiera się w aktualnie otwartej karcie.