scriptingdau
Goto Top

(Firefox) Globale Einstellungen Popupblocker

Hallo Community,

und zwar stehe ich vor dem folgenden Rätsel:

Ich würde gerne global einige Ausnahmen im Popupblocker von Firefox generieren, welche hier im Unternehmen genutzt werden.
Generell soll der Popupblocker aber aktiviert bleiben.

Bislang steuern wir die Einstellungen wie Cache/Proxy/Sicherheitsfeatueres über eine .cfg Datei im Programmverzeichnis.

Beispiel aus dieser Datei:

Deaktiviert den internen PDF-Viewer

pref("pdfjs.disabled", true);
Browsercache auf 8MB limitieren + Haken setzen
pref("browser.cache.disk.capacity", 8192);
pref("browser.cache.disk.smart_size.enabled", false);


Nun konnte ich bislang keine pref-Einstellung finden, welche für die Ausnahmen des Popupblockers zuständig sind.
Jedoch konnte ich eine permissions.sqlite in folgendem Ordner finden, in welchem die Ausnahmen offensichtlich eingetragen werden:

C:\Users\Username\AppData\Roaming\Mozilla\Firefox\Profiles\Profilname.default

Dort stehen auch die neu generierten Ausnamen des Popupblockers.

Leider ist es mir bislang nicht geglückt diese Datei bei einem Aufruf von Firefox automatisch zu modifizieren (um die Ausnahmen zu erweitern), noch konnte ich eine user-pref Einstellung finden mit welcher ich die .cfg Datei bestücken könnte.


Ich würde mich freuen, wenn jemand schon mal vor einem ähnlichen Problem stand, und mir verrät wie er vorgegangen ist.


Dankeschön vorab.


ScriptingDAU

Content-Key: 287031

Url: https://administrator.de/contentid/287031

Printed on: April 25, 2024 at 08:04 o'clock

Member: colinardo
Solution colinardo Oct 29, 2015, updated at Jan 11, 2017 at 16:26:20 (UTC)
Goto Top
Hallo ScriptingDAU,
die SQLite Datenbanken lassen sich z.B. mit AutoIT bearbeiten:

Beispiel:
; VARIABLES ---------
$exclusion = "test1.de,test2.de,test3.de"  
;----------------
#include <SQLite.au3>

$search = FileFindFirstFile(@AppDataDir & "\Mozilla\Firefox\Profiles\*.default")  
if $search <> -1 Then
	$firefoxprofile = @AppDataDir & "\Mozilla\Firefox\Profiles\" & FileFindNextFile($search)  
	FileClose($search)
Else
	msgbox(16,"Fehler","Default-Profile nicht gefunden!")  
	exit 1
endif
$db = $firefoxprofile & "\permissions.sqlite"  

_SQLite_Startup(@ScriptDir & "\SQLite3.dll",1)  
If @error Then
    MsgBox(16, "SQLite Error", "SQLite3.dll kann nicht geladen werden")  
    Exit 1
EndIf
$db = _SQLite_Open($db)
If @error Then
    MsgBox(16, "SQLite Error", "Kann Datenbank nicht öffnen")  
    Exit 1
EndIf
; get max id from table --------------
$query = "Select Max(id) from moz_hosts;"  
Local $results, $aRow, $max_ID
_SQLite_Query($db,$query,$results)
While _SQLite_FetchData($results, $aRow) = $SQLITE_OK
    $max_ID = $aRow
WEnd
$urls = StringSplit($exclusion,",")  
for $i = 1 to $urls
	_SQLite_Exec($db, "INSERT INTO moz_hosts(id,host,type,permission,expireType,expireTime,appId,isInBrowserElement,modificationTime) VALUES (" & ($max_ID + $i) & ",'" & $urls[$i] & "','popup',1,0,0,0,0,0);") ; INSERT Data  
Next
_SQLite_Close($db)
_SQLite_Shutdown()
Für das kompilieren sind zum einen die Library SQLite.au3 nötig welche ins AutoIt-Include-Verzeichnis kopiert werden muss, sowie eine SQLite3.dll. Die in diesem Beispiel im Skript-Pfad liegen muss.
https://www.autoitscript.com/forum/topic/17099-sqlite-semi-embedded-data ...

Das Beispiel öffnet die permissions.sqlite und fügt die in Zeile 2 mit Komma voneinander getrennten URLs in die SQLite DB ein.

Das ganze lässt sich natürlich auch so schreiben das man es als exe kompiliert der man die URLs als Parameter übergibt.

Vielleicht hilft dir das face-wink

Grüße Uwe

-edit- für einen Test habe ich dir mal eine EXE kompiliert die du so nutzen kannst:
add_popup_exclusion.exe "domain1.de,domain2.de,domain3.de"

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate


back-to-topSkript-Update für aktuellen Firefox:
add_popup_exclusion_update_11.01.2017.exe
Bei der Nutzung bitte nun den Domains http:// bzw. https:// voranstellen
add_popup_exclusion.exe "http://domain1.de,https://domain2.de,https://domain3.de"
Member: ScriptingDAU
ScriptingDAU Nov 06, 2015 at 08:31:11 (UTC)
Goto Top
Hallo Uwe,

ich habe die Antwort gerade erst entdeckt.

Erst einmal vielen vielen Dank, ich schaue mir gleich mal deine Exe an, inwieweit ich damit klarkomme.

Wenn ich Fragen habe, bin ich einfach mal so frei und schreibe dich an, bzw. kommentiere hier face-smile

Danke!
Member: ScriptingDAU
ScriptingDAU Nov 11, 2015 at 11:03:42 (UTC)
Goto Top
Hallo Uwe,

die von dir kompilierte Exe funktioniert wunderbar, allerdings prüft sie nicht ab, ob bereits ein Eintrag in der permissions.sqlite besteht, sondern fügt bei jedem Aufruf einen Eintrag hinzu.

Wäre es möglich das Programm um diese Abfrage zu erweitern?

Tausend Dank vorab, du hast mir/uns richtig weitergeholfen.

LG ScriptingDAU
Member: colinardo
Solution colinardo Nov 11, 2015, updated at Nov 23, 2015 at 15:02:20 (UTC)
Goto Top
Zitat von @ScriptingDAU:
die von dir kompilierte Exe funktioniert wunderbar, allerdings prüft sie nicht ab, ob bereits ein Eintrag in der permissions.sqlite besteht, sondern fügt bei jedem Aufruf einen Eintrag hinzu.

Wäre es möglich das Programm um diese Abfrage zu erweitern?
Die EXE ist oben um diesen Punkt erweitert worden, Download unter der selben Adresse.

Grüße Uwe

Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Member: colinardo
colinardo Jan 11, 2017 updated at 17:21:46 (UTC)
Goto Top
Hier nur als Ergänzung der aktualisierte Code für den momentan aktuellen Firefox 50.1.0 (Datenbanktabelle hatte sich geändert)
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <SQLite.au3>
#include <Date.au3>
Global $exclusion
Global $firefoxprofile = ""  
; SQL DLL in die EXE inkludieren
FileInstall("C:\Program Files (x86)\AutoIt3\Include\SQlite3.dll",@TempDir & "\sqlite3.dll",1)  
; Übergebene Parameter überprüfen
if $CmdLine = 1 then
	$exclusion = $CmdLine[1]
	$urls = StringSplit($exclusion,",")  
Else
	ConsoleWriteError("Falsche Parameterangabe! => add_popup_exclusion.exe ""http://www.domain.de,https://www.domain2.de"" " & @CRLF)  
	Exit 1
Endif
; Default-Profilordner ermitteln
$inipath = @AppDataDir & "\Mozilla\Firefox\profiles.ini"  
for $section in IniReadSectionNames($inipath)
	if IniRead($inipath,$section,"Default","") = 1 then  
		$profilename = StringSplit(IniRead($inipath,$section,"Path",""),"/")[2]  
		$firefoxprofile = @AppDataDir & "\Mozilla\Firefox\Profiles\" & $profilename  
		ExitLoop
	Endif
next

if $firefoxprofile = "" Then  
	ConsoleWriteError("FEHLER: Firefox Default-Profil nicht gefunden!" & @CRLF)  
	exit 1
endif
; SQL-Datenbank-Pfad zusammensetzen
$db = $firefoxprofile & "\permissions.sqlite"  
; SQLIte Bibliothek initialisieren
_SQLite_Startup(@TempDir & "\sqlite3.dll",1)  
If @error Then
    ConsoleWriteError("FEHLER: <SQLite Error> SQLite3.dll kann nicht geladen werden" & @CRLF)  
    Exit 1
EndIf
; Datenbank öffnen
$db = _SQLite_Open($db)
If @error Then
    ConsoleWriteError("FEHLER: <SQLite Error> Kann Datenbank nicht öffnen!" & @CRLF)  
    Exit 1
EndIf
; größte ID der Tabelle moz_hosts ermitteln
$query = "Select Max(id) from moz_perms;"  
Local $results, $aRow, $max_ID
_SQLite_Query($db,$query,$results)
While _SQLite_FetchData($results, $aRow) = $SQLITE_OK
    $max_ID = $aRow
WEnd

; Zeit in Millisekunden seit 01/01/1970
$now_time_milli = _DateDiff("s","1970/01/01 00:00:00",_NowCalc())*1000  

; Für jede übergebene URL
for $i = 1 to $urls
	; checken ob die URL schon in der Tabelle vorhanden ist
	$query = "Select id from moz_perms where origin = '" & $urls[$i]& "' and type = 'popup';"  
	if not _SQLite_QuerySingleRow($db,$query,$results) = $SQLITE_OK then
		; wenn kein Eintrag vorhanden, füge die URL als Popup Ausßnahme hinzu
		$max_ID = $max_ID + 1

		if _SQLite_Exec($db, "INSERT INTO moz_perms(id,origin,type,permission,expireType,expireTime,modificationTime) VALUES (" & $max_ID & ",'" & $urls[$i] & "','popup',1,0,0," & $now_time_milli & ");") = $SQLITE_OK then  
			ConsoleWrite("URL: '" & $urls[$i] & "' wurde erfolgreich eingetragen." & @CRLF)  
		Else
			ConsoleWriteError("FEHLER: <URL:> '" & $urls[$i] & "' konnte wegen eines unbekannten Fehlers nicht eingetragen werden" & @CRLF)  
		endif
	Else	; URL schon vorhanden
		ConsoleWrite("URL: '" & $urls[$i] & "' ist schon vorhanden." & @CRLF)  
	endif
Next
; SQL DB-Close/Dispose
_SQLite_Close($db)
_SQLite_Shutdown()
exit 0
Grüße Uwe