**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,
         triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()
} );
```
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, {triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()});
```
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.mjs41
```
Jak pokonać ten błąd?
#firefox #addons #webextensions #experimental #api
fewtoast

Znalazłem rozwiązanie w kodzie źródłowym Firefoksa - loadTabs.


Zamiast loadOneTab użyłem tego:



window.gBrowser.loadTabs( [linkGo] , {<br />

	inBackground: event.target.inBackground,<br />

	relatedToCurrent: true,<br />

	allowThirdPartyFixup: true,<br />

	triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()<br />

} );<br />

```<br />

<br />

---<br />

<br />

Zamiast `loadURI` użyłem tego:<br />

<br />

```<br />

window.gBrowser.loadTabs([linkGo], {<br />

	replace: true,<br />

	allowThirdPartyFixup: true,<br />

	triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()<br />

});<br />

```<br />

<br />

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

Zaloguj się aby komentować