#webextensions

0
5
Chcę skrypt, który rozwija wątki wpisu na Twitterze, w formie drzewa, bo tak się o wiele lepiej czyta, nie trzeba klikać, rozwijać, wracać, wszystko na osobnych podstronach.
Jest taka aplikacja, na PC najlepiej, która tak robi? Albo skrypt do strony, rozszerzenie do przeglądarki?
#twitter #xcom #elonmusk #userscript #webextensions #webapp #app #apk
smierdakow

Są boty, które wołasz i to robią

fewtoast

@smierdakow Podaj nazwę.

smierdakow

@fewtoast musisz wpisać "@threadreaderapp unroll"

Zaloguj się aby komentować

Jak w web-extension wykryć, czy strona internetowa obsługuje tryb ciemny i czy jest aktualnie w trybie ciemnym?

Nie tylko gdy automatycznie przełącza się w tryb ciemny (z color-scheme), ale także czy domyślnie jest wyłącznie w trybie ciemnym, bez użycia color-scheme, w ogóle bez trybu jasnego?

Chcę to do rozszerzenia typu Firelux, ale z taką automatycznym, skutecznym wykrywaniem włączonego trybu ciemnego.

#firefox #webextensions #css #javascript
fewtoast

Myślałem że może się ktoś wysilił z wykrywaniem ciemnego tła chociaż i jasnych napisów, taki wykrywający co się da...


Potem przyszło mi do głowy, że powinna istnieć baza stron, która ma tryb ciemny, i takim sposobem to obejść...

Ale sam ją sobie właśnie robię w Firelux, mozolnie klikając.

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
fewtoast

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ć

Zostań Patronem Hejto i odblokuj dodatkowe korzyści tylko dla Patronów

  • Włączona możliwość zarabiania na swoich treściach
  • Całkowity brak reklam na każdym urządzeniu
  • Oznaczenie w postaci rogala , który świadczy o Twoim wsparciu
  • Wcześniejszy dostęp, do wybranych funkcji na Hejto
Zostań Patronem
Marzy mi się [browser.storage.sync](Marzy mi się browser.storage.sync , ale dla webu.
Że można przechowywać i synchronizować dane ze strony internetowej, poprzez konto przeglądarki internetowej, które synchronizuje ustawienia i dodatki przeglądarki internetowej.
Można by to też przesunąć do poziomu synchronizacji poprzez konto systemu operacyjnego.

To ma się synchronizować przez usługę synchronizacji od Mozilli na Firefox i od Google na Chrome.
Bez zakładania konta przez usera, a od strony dewelopera, bez zarządzania tym storage, po prostu zapisujesz do asynchronicznego storage, i nie myślisz o tym więcej, backendu nie musisz mieć.

Dla WebExtensions działa. Z założenia byłby to niewielki storage.
#webextensions #webdev #frontend #backend #programowanie
64c27461-958c-4c69-8d8d-31d003fe2046
wombatDaiquiri

@fewtoast tzn. user tracking będzie się robiło przez storage.sync po stronie admina każdej stronki? Super obejście ustawy o pytania o ciastka - robimy synchronizowane ciastka ale inaczej je nazwiemy xD


groźne. A to pierwsze zastosowanie które mi przyszło do głowy xD

fewtoast

@wombatDaiquiri Masz na myśli, że miałoby być zapisywane poza własną stroną?

Nie, tak by nie miało być, czemu by tak miało być.


To by miało zastąpić mini bazy danych, tylko out of the box, wygodniej, szybciej.

wombatDaiquiri

@fewtoast na swojej stronie. Zapisuję jako ustawienie "to był gość o ID 2136". Jeśli na innym urządzeniu znajdę to ID, to wiem że przegląda mnie ta sama osoba, mimo tego że np. nie jest zalogowana, a nawet jest na innym urządzeniu. Jako administrator strony np. Hejto.

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
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ć