Buduje chrome extension i nie działa mi javascript.

0

Buduje chrome extension i nie działa mi javascript. Czytałem że chyba muszę dodać eventlistenery.
Wtyczka będzia działać tylko wewnątrz popupu wiec ten javascript nie wchodzi w interakcje z stronami zewnętrznymi.

function p1() {a = document.form1.a.value.replace(',', '.')/100;b = a*document.form1.b.value.replace(',', '.');document.form1.total1.value = b}
1

Powinieneś dodać ten skrypt do manifest.json i ustawić odpowiednie uprawnienia

https://developer.chrome.com/docs/extensions/mv3/getstarted/

0

Nie widzę nic w tym linku nic o dodawaniu javascriptu do manifestu jedynie do background .js plus dodanie do manifestu "service_worker". Co zrobiłem i dalej nie działa

0

Wrzuć tutaj na forum swój manifest.json

0
{
"manifest_version": 2,
"name": "coś",
"description": "coś",
"version": "1.0",
"icons": {"128": "128.png"},
"browser_action": {
	"default_icon": "icon.png",
	"default_popup": "popup.html"
},
  "background": {
    "service_worker": "script.js"
  },
"permissions": ["activeTab","storage"]
}

0
winnxan napisał(a):
{
"manifest_version": 2,
"name": "coś",
"description": "coś",
"version": "1.0",
"icons": {"128": "128.png"},
"browser_action": {
	"default_icon": "icon.png",
	"default_popup": "popup.html"
},
  "background": {
    "service_worker": "script.js"
  },
"permissions": ["activeTab","storage"]
}

Tak się składa, że od jakiegoś czasu piszę sobie wtyczkę do chroma i coś niecoś się nauczyłem.
Możliwe, że kod się wykonuje, ale nie działa jak powinien. Żebyśmy mogli to ocenić musielibyśmy zobaczyć Twój popup.html.
Na ten moment mogę zadać Ci kilka pytań, które nam objaśnią Twoją sytuację:

  1. Czy okienko popup się pokazuje?
  2. Czy w konsoli Skryptu service worker są jakieś błędy (aby sprawdzić to, wejdź w chrome://extensions/, a następnie przy Twoim rozszerzeniu naciśnij skrypt service worker)
  3. Czy jeśli zakomentujesz cały kod i wstawisz console.log, ewentualnie alert() to się wykonują?
0

okienko popup sie pokazuje

wyskakuje błąd

Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem:". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.

i zaznacza ta linie w popup.html


  <input type="number" pattern="[0-9]*" inputmode="decimal" name=c placeholder="k" oninput="p2()">  <input type="number" pattern="[0-9]*" inputmode="decimal" name=d placeholder="j" oninput="perc2()">  <input size=7 name=total2>

1

Z tego co się rozeznałem ten błąd odnosi się do wbudowanych programów obsługi zdarzeń. We wtyczkach nie możesz używać np. onClick w HTML.
https://stackoverflow.com/a/58689794/16880863
musisz do tego wykorzystać JS:
https://stackoverflow.com/a/36349056/16880863

Jeśli kod nadal nie działa, albo masz jakieś problemy pokaż nam swój HTML. Bez niego to będzie wróżenie z fusów.

Dodatkowo niektóre Twoje atrybuty nie mają cudzysłowów - name=d, name=c, size=7 name=total2.

1

Dziekuje za odpowiedź

Chyba chodzi rzeczywiście o drugi link który podałeś czyli nie może być we wtyczkach chrome inline javascriptu, czyli oninput="p2()"

Teraz musze chyba dodać "id" do inputów i potem coś takiego


document.getElementById("myButton").addEventListener("click", myFunction);

function myFunction(){
  console.log('asd');
}

tylko że tu przykład funkcji po kliknięciu buttona a mi się to automatycznie oninput wykonywał

druga sprawa że nie może być 2 id więc będę musiał zrobić getelemntby class ?? Dodam klase która wrzuca to do 1 funkcji z 2 pól input

0

Jeśli chcesz, żeby eventListener był wywoływany jak oninput, użyj:

element.addEventListener("input", (e)=>{
  const myInputText = e.target.value
  console.log(myInputText)
})

Od razu masz jak dobrać się do jego wartości.

Fajne gdybyś opowiedział, do czego ma służyć twój kod i pokazał swój JS. Wtedy razem dojdziemy do rozwiązania. Mam trochę czasu możemy pokombinować.

druga sprawa że nie może być 2 id więc będę musiał zrobić getelemntby class ?? Dodam klase która wrzuca to do 1 funkcji z 2 pól input

Po raz kolejny wróżenie z fusów. Tak, nie może być 2 takich samych id, ale jak to zmienić to ja ci nie powiem, bo nie wiem co ma robić ten kod.

1 użytkowników online, w tym zalogowanych: 0, gości: 1