AddOn und CSP?


  • Interesse ist nicht das Problem ;). Eigentlich auch nicht mein Englisch, auch wenn ich natürlich Deutsch bevorzuge. Aber Zeit... man muss ja von irgendetwas seine Rechnungen bezahlen :cry:

    So schnell kanns gehen...

    Sören, du hattest recht, das geht leichter als ich dachte.

    OK, meine Erweiterung ist nur für einen sehr kleinen Personenkreis nützlich und rein rechtlich darf ich die ohnehin nie verbreiten weil Wetter.com wohl ein Problem damit hätte wie ich das umgesetzt habe, aber es funktioniert. Das Ding zeigt auf Klick das Wetter von wetter.com für mein kleines Heimatstädtchen im Popup an.

    Aber vielleicht kann mir ja jemand helfen: Mein AddOn funktioniert nur, weil ich
    extension.webextensions.default-content-security-policy
    geleert habe. Das ist natürlich keine Lösung, aber ansonsten gab es permanent den Fehler das Scripte nicht auf _self zugreifen dürfen.

    die manifest.json:

    die popup.html:

    und die w.js:

    Mehr Dateien sind es nicht. Da wo *Heimatstadt* steht, sind die entsprechenden Namen bzw die Wetter.com-ID hinterlegt, ich denke mal nicht, dass das irgendwer braucht ;).

    Falls jemand die richtige Suchrichtung kennt in die er mich treten könnte, um das SCP-Problem zu lösen.. Danke :)

    Greetz,
    DF

  • Der CSP-Fehler hängt mit der Zeile hier zusammen:

    Code
    _wcomWidget({id: 'wcom-1',location: '*Heimatstatd',format: '300x250',type: 'summary'});

    JavaScript gehört nicht in HTML-Dateien, sondern in JavaScript-Dateien. Schiebe das also in die Datei w.js. Weil du die Zeile natürlich erst ausführen möchtest, wenn das HTML bereit ist (weil es sonst nicht funktionieren wird), muss das so aussehen:

    Code
    document.addEventListener('DOMContentLoaded', () => {
      _wcomWidget({id: 'wcom-1',location: 'DE0001020',format: '300x250',type: 'summary'});
    });

    Prüfe bitte auch deine Berechtigungen. Du brauchst ganz sicher nicht alle Berechtigungen, die du da verlangst und beim Thema Berechtigungen sollte man einen Minimal-Ansatz wählen: nur verlangen, was auch gebraucht wird.

    Code
    "activeTab",
    "tabs",
    "storage",
    "webRequest",
    "webRequestBlocking",
    "http://*/*",
    "https://*/*",
    "<all_urls>"

    "http://*/*" und "https://*/*" sind überflüssig, wenn du bereits "<all_urls>" verwendest, aber wenn du nur wetter.com abfragst, solltest du auch nur dafür die Berechtigung verlangen und nicht pauschal für alle Webseiten. Die Storage-API verwendest du nicht, also brauchst du die Berechtigung auch nicht. Ich hab die anderen Berechtigungen jetzt nicht kontrolliert.

    Ergänze innerhalb von "browser_action" außerdem noch folgende Zeile:

    Code
    "browser_style": false

    false ist zwar der Standard-Wert, wenn du nichts angibst, daher macht es keinen funktionalen Unterschied, aber wenn du das nicht explizit angibst, wird es als Warnung in der Browserkonsole geloggt, dass du das angeben sollst.


  • Ich weiss nicht, ob es die richtige Richtung ist, aber ich würde mir das mal anschauen:
    https://developer.mozilla.org/en-US/Add-ons/…Security_Policy
    bzw.
    https://developer.mozilla.org/en-US/Add-ons/…security_policy

    BINGO, Dank dir :) Ich hatte mich schon dusselig gesucht. Aber scheinbar mit den falschen Suchbegriffen.

    Zitat


    Und wenn du deine Extension als ZIP hier anhängst, ist es bequemer, das mal schnell zu testen. ;)

    Naja... das Problem ist da wie gesagt, dass die Extension in der Form nicht verbreitet werden DARF. Ich missbrauche den Widget-Code von Wetter.com. Dazu verändere ich auch noch den String der als Antwort vom Server kommt, weil das Widget eigentlich ein Script anspricht dass schon auf dem dortigen Server liegt und URLs ohne dass HTTP: aber mit // ausgibt. Und zu guter Letzt werfe ich auch noch die Eigenwerbung von wetter.com aus dem Ergebnis. Ich glaube nicht dass Wetter.com sich über Tests in diesem Forum ärgern würde, aber rein rechtlich müsste Sören das AddOn ohnehin wieder entfernen sobald er davon Kenntnis erlangt. Also ziemlich nutzlos...

    Greetz,
    DF


  • [...]
    JavaScript gehört nicht in HTML-Dateien, sondern in JavaScript-Dateien. Schiebe das also in die Datei w.js. Weil du die Zeile natürlich erst ausführen möchtest, wenn das HTML bereit ist (weil es sonst nicht funktionieren wird), muss das so aussehen:

    Code
    document.addEventListener('DOMContentLoaded', () => {
      _wcomWidget({id: 'wcom-1',location: 'DE0001020',format: '300x250',type: 'summary'});
    });


    Das mit dem Laden in der w.js hatte ich getestet, aber den EventListener natürlich vergessen. Dank Dir :klasse: .

    Zitat


    Prüfe bitte auch deine Berechtigungen. Du brauchst ganz sicher nicht alle Berechtigungen, die du da verlangst und beim Thema Berechtigungen sollte man einen Minimal-Ansatz wählen: nur verlangen, was auch gebraucht wird.

    Dank Dir. Ich habe eine manifest.json einer anderen Erweiterung als Ansatzpunkt genutzt und das dann nicht weiter geändert bzw gekürzt sobald ich dachte alles zu haben.

    Zitat


    Ergänze innerhalb von "browser_action" außerdem noch folgende Zeile:

    Code
    "browser_style": false

    false ist zwar der Standard-Wert, wenn du nichts angibst, daher macht es keinen funktionalen Unterschied, aber wenn du das nicht explizit angibst, wird es als Warnung in der Browserkonsole geloggt, dass du das angeben sollst.

    Ah, daher kam die Meldung. Ich hatte mich schon gefragt woher die kam. Da es aber sonst keinerlei Auswirkungen zu haben schien, hab ich das ignoriert.

    Ich sage mal dickes Danke für die Hilfe. Und da ich jetzt weiss wie es grundsätzlich funktioniert kann ich ja vielleicht mal mein Wunschprojekt in Angriff nehmen. Das wird aber einige Wochen oder eher Monate dauern, da ich da wirklich alles von Grund auf Neu bauen muss. Und ich muss auch gucken, ob Webextensions die nötigen Rechte überhaupt haben.

    Nochmals Danke!

    Greetz,
    DF