#addons

0
4
W `chatgpt.com`, `textarea` jest czyszczona po 1 sekundzie od załadowania strony.
Przez to skrypt który wkleja tekst poprzez `textareaEl.value = "tekst"` nie wystarcza.

Zrobiłem z `setTimeout` 1001 ms, to działa, już przy 1000 ms nie działa.
Observery nie ogarniają, ale może źle coś robię?
Z opóźnieniem 1001 ms jest to zawodne, bo czasem dzieje się to w dłuższym czasie, więc pomóż znaleźć lepszą metodę?

Następny problem, to że nawet jak wpiszę, to `buttonEl.click();` i tak nie zadziała, bo aktywuje się dopiero po wpisaniu czegoś z klawiatury, a wywołanie event `keydown` itp. też nie działa. Więc pozostaje po wklejeniu poprzez `textareaEl.value = "tekst"`, naciśnięcie jakiegoś znaku na klawiaturze, skasowanie go, i naciśnięcie Enter, żeby wiadomość została wysłana.
Też mógłbyś pomóc to rozwiązać?

Dosłownie nie ma metody, żeby stworzyć Search Engine dla Firefox dla ChatGPT.

Metoda którą opisałem, jest niedoskonała oraz niedokończona.

Przed tymi dwoma krokami, po prostu pobieram parametr z URL, w formie `https://chatgpt.com/?usq=test`, strona nie kasuje parametru `usq` po załadowaniu strony, więc spokojnie można z tego skorzystać.

Jak to się uda, to spakuję to w WebExtension, i upublicznię.

#frontend #javascript #userscript #skrypt #addons #extensions #dodatki #rozszerzenia #plugin #wtyczki #chatgpt #ai #firefox
2

czy ja dobrze rozumiem, że probujesz użyć interfejsu wizualnego jako API?

@mortt Nie, to do UserScript.

Zaloguj się aby komentować

Zaloguj się aby komentować

Czy synchronizacja działa na plik zip załadowany z Dodatki -> Narzędzia dla wszystkich dodatków -> Zainstaluj dodatek z pliku...?

Robię podstawowy test synchronizacji `browser.local.sync`:

```javascript
let monster = {
name: "Kraken",
tentacles: true,
eyeCount: 10,
};

let kitten = {
name: "Moggy",
tentacles: false,
eyeCount: 2,
};

browser.storage.sync.set({ kitten, monster })
```

i na drugim profilu:
```javascript
await browser.storage.local.get("kitten")
```

ale nic się nie dzieje, `get("kitten")` nie zwraca nic.

PYTANIE:
1. Czy synchronizacja działa na plik zip załadowany z Dodatki -> Narzędzia dla wszystkich dodatków -> Zainstaluj dodatek z pliku...?
Mam w `manifest.json` `applications.gecko.id`, tak jak trzeba.
2. Jeśli nie, to co trzeba zrobić, żeby PRZETESTOWAĆ działanie synchronizacji?

API https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/sync
#firefox #addons #rozszerzenia #extensions #webextensions
1

Testowałem, i sam sobie odpowiem:

1. Da się.

2. Da się nawet bez pakowania do pliku zip, można nawet bezpośrednio załadować folder w `about:debugging#/runtime/this-firefox`.


Ale...


Miałem pewien pomysł z wykorzystaniem i...

Synchronizacja w Firefox jest absolutnie nieprzewidywana i niekonsekwentna. Nie ma opcji żeby użyć jej do czegoś użytecznego, tego nie da się sensownie użyć. Całe API WebExtensions ma wiele dziwnych błędów, niektóre zgłosiłem i są olewane. Tutaj API synchronizacji czasami całkowicie ignoruje jakieś dane, czasem bez problemu synchronizuje zgodnie z cyklem czasowym, czasem event onChanged łapie czasem nie, czasem funkcja get() łapie, czasem nie i koniec. Wybili mi z głowy ten pomysł.

Zaloguj się aby komentować

**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
1

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ć