• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Generowanie obrazka w przeglądarce

Object Storage Arubacloud
+3 głosów
251 wizyt
pytanie zadane 8 maja 2023 w JavaScript przez rafal.budzis Szeryf (85,260 p.)

Hejka mam problem z głupimi telefonami. Może znacie jakieś obejście. Mam znacznik canvas oraz przycisk pobierz zdjęcie który tworzy plik na podstawie tego co jest w canvas i pobiera obraz dla usera. Kod który mam wygląda następująco:
 

canvas.toBlob((blob) => {
    const url = blob === null ? canvas.toDataURL("image/png", 1) : URL.createObjectURL(blob);

    const a = document.createElement('a');
    a.href = url;
    a.download = 'avatar.png';
    a.click();
}, "image/png", 1);

I to się zaczyna magia ponieważ na komputerze działa, a na komórkach nie zawsze. Co to znaczy? Gdy ktoś wejdzie na stronę przez przeglądarkę to wszystko działa. Jednak gdy wyśle link do kogoś na messanger lub ktoś użyje linku w aplikacji facebooka. To strona otwiera mu się w tym głupim trybie "podglądu" Nie wiem jak to się nazywa. I jeśli ktoś nie kliknie u góry 3 kropek i nie wybierze "otwórz w chrome" To nie zadziała. 

Moje pytanie to czy da się to jakoś ominąć? Ewentualnie przechwycić błąd i wyświetlić komunikat który pomoże użytkownikowi zrozumieć problem. 

Jeśli chcecie potestować generator obrazków jest tutaj: 

https://wegateka.pl/etsa/ 
Zachęcam przy okazji do dorzucenia swoich podpisów jeśli zgadzacie się z propozycją ;) 

komentarz 9 maja 2023 przez VBService Ekspert (253,340 p.)

Masz teraz

Jeśli Twój avatar nie zapisał się. Spróbuj zaznaczyć obrazek i pobrać go ręcznie. Jeśli to nie działa otwórz naszą stronę w innej przeglądarce internetowej.


Może zmień komunikat, np.

"Jeśli Twój avatar nie otworzył się automatycznie do zapisu. Spróbuj zaznaczyć obrazek i pobrać go ręcznie lub pobierz go z tego linku"

i pod tekst "linku" podepnij ten

const a = document.createElement('a');

 

komentarz 9 maja 2023 przez rafal.budzis Szeryf (85,260 p.)
Czy to coś zmieni? Na moje oko to ta przeglądarka ma wszystko po blokowane. Jak przytrzymam palec na zdjęciu to nie pokazują mi się żadne opcje. A w zwykłej przeglądarce miałbym pobierz ;)
komentarz 9 maja 2023 przez VBService Ekspert (253,340 p.)

Sugeruje umieścić ten komunikat

już przy próbie "kliknięcia" w

z poziomu przeglądarki messenger-a. laugh

 

2 odpowiedzi

+2 głosów
odpowiedź 9 maja 2023 przez Comandeer Guru (601,110 p.)
wybrane 9 maja 2023 przez rafal.budzis
 
Najlepsza

Każda przeglądarka ma coś takiego jak User Agent string. Teoria polega na tym, że każda przeglądarka powinna mieć unikatowy, żeby dało się ją odróżnić od reszty. W praktyce często przeglądarki kłamią i przedstawiają się jako inne. Aczkolwiek, przeglądarka FB przedstawia się jako FB (ma w UA stringu fragment FB_IAB), co pozwoli ją zidentyfikować.

Do UA stringu można się dostać albo przez nagłówek HTTP User-Agent, który przyjdzie w żądaniu, albo przez navigator.userAgent w kodzie JS.

komentarz 9 maja 2023 przez rafal.budzis Szeryf (85,260 p.)
Ooo ekstra! Myślałem że za podgląd odpowiada ta sama przeglądarka co w systemie tylko uruchomiona w jakimś dziwnym trybie. Nie wpadłbym na to że ma to unikatowego UA.
komentarz 9 maja 2023 przez Comandeer Guru (601,110 p.)
To różnie. W niektórych apkach – tak, np. w Discordzie. Można to poznać po tym, że jak się otworzy menu w takiej przeglądarce, to na dole jest ikonka Chrome'a i napis, że działa w Chrome. No i po tym, że ciasteczka z Chrome'a są obecne, więc jesteśmy zalogowani w różne miejsca.

Natomiast FB ma swój własny webview, odizolowany od tego systemowego. I tam się dzieją rzeczy – najczęściej dziwne i smutne.
+1 głos
odpowiedź 9 maja 2023 przez Wiciorny Ekspert (270,110 p.)
A nie sprawdzałeś np, czy informacje w trybie podglądu mają jakieś inne dodatkowe metadata, albo dane w header odpowiedzi/zapytania ? Może filtrować by to w taki sposób, że jeśli użytkownik otwiera w ten sposób plik/zdjęcie, czy coś to wysyłać coś dodatkowego w nagłówkach, albo zaczytywać to... i na takiej podstawie wnioskować, czy i kiedy użytkownik znajduje się w jakim trybie? W ten sposób dostosować komunikat, to jest tylko takie moje hipotetyczne gdybanie.
komentarz 9 maja 2023 przez rafal.budzis Szeryf (85,260 p.)
No własnie problem jest taki że nawet nie wiem jak to debugować aby znaleźć jakąś różnice.

Zapytanie tam żadne nie leci bo tworzę base64 i dodaje do go znacznika <a>

Wiem że base64 i link są poprawnie wygenerowane więc po prostu zablokowane jest pobieranie plików. Pytałem też chat GTP o rozwiązanie bez skutku :/

Podobne pytania

+2 głosów
3 odpowiedzi 455 wizyt
pytanie zadane 17 sierpnia 2020 w JavaScript przez Bakkit Dyskutant (7,600 p.)
+1 głos
1 odpowiedź 137 wizyt
0 głosów
1 odpowiedź 141 wizyt
pytanie zadane 12 lipca 2018 w JavaScript przez Gapcio Nowicjusz (120 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...