In neueren Versionen ab Opera 10.50 gibt es einen Bug, der es nicht erlaubt über Operas Menü externe Programme korrekt zu starten.
Wo eine so etwas braucht? Um an wget oder andere externe Downloader mehrere Parameter und eine URL zum Download zu übergeben oder den IETester aufzurufen.
Das Problem ist der interne Befehl Execute program in der Menüdatei, welcher nicht mehrere Parameter an das externe Programm übergibt.
Ich habe für Windows eine machbare, wenn auch nicht besonders elegante Methode gefunden, den üblen Bug zu umschiffen.
Es muss statt des externen Programms ein VBS-Script für den Windows Scripting Host aufgerufen werden, welches die Parameter dann übergibt.
Datei für Windows Scripting
VBS-Datei:
commandLine = Wscript.Arguments.item(0) ' fetch commandline
commandLine = Replace(commandLine, "%_", chr(32)) ' replace %_ with space
commandLine = Replace(commandLine, "%q", chr(34)) ' replace %q with "
REM MsgBox( commandLine ) ' debug only
Set WshShell = Wscript.createobject("wscript.shell")
WshShell.exec(commandLine) ' call external program
Den Code als Textdatei callexternal.vbs herunterladen im Opera-Programmverzeichnis abspeichern.
Änderungen in eigener Menüdatei
Dann sind noch (leider) Menüeinträge in der eigenen Menüdatei bei Execute program zu ändern.
Es ist zu beachten, dass es bei Programmaufrufen erforderlich ist, Pfade mit Leerzeichen in Anführungszeichen (") zu setzen.
Die verschiedenen Parameter, welche an das externe Programm zu übergeben sind, müssen mit dem Sonderzeichen %%_ zusammengefügt werden, da Opera sonst bei ersten Leerzeichen keinen Parameter mehr übergibt. Mehrfache Anführungszeichen sind in Operas Menüdatei auch nicht zugelassen.
Es sind also Leerzeichen durch %%_, Anführungszeichen (") durch %%q zu ersetzen.
Ja, das ist eine etwas ekelhafte Syntax für die Ersetzung. Es verhindert, dass Opera eigene Variablen einfügt und später bei der Übergabe an die Windows Shell selbst nicht irgendwelche %XX-Sequenzen verstümmelt werden.
Wie was zu ersetzen ist, zeigt das nachfolgende Beispiel eines Menüeintrags, der wget aufruft, um eine Webseite herunter zu laden.
Vorher:
[Wget Menu] Item, "Ganze Seite"="Execute program, "P:\Wget\wget.exe", "-P U:\Test Drive\Downloads -vkKHp -R?N=D,?M=A,?S=A,?D=A %u""
Nachher:
[Wget Menu] Item, "Ganze Seite"="Execute program, "P:\Opera\10\callexternal.vbs", "P:\Wget\wget.exe%%_-P%%_%%qU:\Test%%_Drive\Downloads%%q%%_-vkKHp%%_-R?N=D,?M=A,?S=A,?D=A%%_%u""
Zu beachten ist, dass auf dem eigenen Rechner natürlich die Pfade zu den externen Programmen und der VBS-Datei angepasst werden müssen!
Download
Fazit
So funktionieren wenigstens wieder Übergaben an externe Programme.
Das Ganze erinnert mich an eine Bugflickerei, die ich mit früher beim URL-Komma-Bug mit dem URLWrapper vornehmen musste.

Kommentar für Blogeintrag
TrackBack-URL:
http://gwendragon.de/blog/Web/Browser/Opera/Bugs/parameter-bug-menue.html/trackback↑Artikel