Re: Webgadget und window.print
Verfasst: 12.01.2018 11:41
Hast Du meinen Trick weiter oben mal versucht?
Das deutsche PureBasic-Forum
http://forums.purebasic.com/german/
Code: Alles auswählen
CompilerIf #PB_Compiler_Version > 540
ImportC "-lwebkitgtk-3.0"
CompilerElse
ImportC "-lwebkitgtk-1.0"
CompilerEndIf
webkit_web_settings_new()
webkit_web_view_set_settings(*WebkitWebView, *WebkitSettings)
EndImport
Procedure EnableJSforWebGadget(WebgadgetID.i)
; Enable JavaScript support in GTK3 WebGadgets
Protected WebkitSettings.i
; ----- Get Webkit's default setting (with scripting languages enabled by default)
WebkitSettings = webkit_web_settings_new()
; ----- Store Webkit's default settings in WebGadget
webkit_web_view_set_settings(GadgetID(WebgadgetID.i), WebkitSettings)
EndProcedure
Code: Alles auswählen
CompilerIf #PB_Compiler_Version > 540
ImportC "-lwebkitgtk-3.0"
CompilerElse
ImportC "-lwebkitgtk-1.0"
CompilerEndIf
webkit_web_settings_new()
webkit_web_view_set_settings(*WebkitWebView, *WebkitSettings)
EndImport
Procedure EnableJSforWebGadget(WebgadgetID.i)
; Enable JavaScript support in GTK3 WebGadgets
Protected WebkitSettings.i
; ----- Get Webkit's default setting (with scripting languages enabled by default)
WebkitSettings = webkit_web_settings_new()
; ----- Store Webkit's default settings in WebGadget
webkit_web_view_set_settings(GadgetID(WebgadgetID.i), WebkitSettings)
EndProcedure
html.s = ""
html + "<!DOCTYPE html>" + #CRLF$
html + "<html>" + #CRLF$
html + " <head>" + #CRLF$
html + ~" <script type=\"text/javascript\">" + #CRLF$
html + ~" //alert(\"js\");" + #CRLF$
html + " window.print();" + #CRLF$
html + " </script>" + #CRLF$
html + " </head>" + #CRLF$
html + " " + #CRLF$
html + " <body>" + #CRLF$
html + " <h1>xxxxxxxxxx</h1>" + #CRLF$
html + " </body>" + #CRLF$
html + "</html>" + #CRLF$
filename.s = GetTemporaryDirectory() + "webGadgetTest.html"
fileproto.s = "file:///" + filename
Debug "filename: " + filename
Debug "fileproto: " + fileproto
file = CreateFile(#PB_Any, filename)
Debug "CreateFile: " + file
If file
WriteString(file, html, #PB_UTF8)
CloseFile(file)
Else
MessageRequester("error","can't write to file '" + outfile + "'")
EndIf
OpenWindow(0,50,50,800,600,"WebPrintTest")
WebGadget(1,0,0,800,600,fileproto)
EnableJSforWebGadget(1)
SetGadgetText(1, fileproto)
;EnableJSforWebGadget(1)
Repeat
Event = WindowEvent()
Until Event = #PB_Event_CloseWindow
del = DeleteFile(filename)
Debug "DeleteFile: " + del
Ich habe bereits 2013 im englischen Forum unter Feature Requests and Wishlists den Vorschlag gemacht, den Navigation-Callback auch unter Linux und MacOS zu implementieren und dort auch gleich die Lösung für Linux und MacOS gezeigt. Technisch ist es mit WebKit kein Problem, alle bisher nur in Windows implementierten Funktionen auch für Linux und MacOS nachzurüsten, aber die Entwickler haben sich bisher leider nie die Mühe gemacht, dies auch mit WebKit zu implementieren, noch nicht einmal, wenn ich dies - wie in diesem und einigen anderen Fällen - bereits demonstriert hatte und ihnen damit den größten Teil der Arbeit (das Zusammensuchen der API-Funktionen und den Funktionstest als Proof of Concept) abgenommen habe.TroaX hat geschrieben:Musste ja auch feststellen, das die meisten Möglichkeiten mit dem Webgadget auch nur unter Windows funktionieren (Navigation-Callback, Kontext-Menü blockieren usw.).
Es geht nicht darum, das klicken eines Buttons auszuwerten. Es geht darum, die Submit-Frequenz an das Gadget zu schicken, damit es ein Formular abschickt. Dadurch kann es die Daten an den Silent-Server (oder Schattenserver) senden und die Daten an Purebasic weitergeben. Das Navigation-Callback will ich nutzen, damit das Gadget immer im Kontext dieses Schattenservers bleibt. Der Schattenserver selbst soll das ganze herumgeplänkel mit HTML als Datei speichern und über Gadget aufrufen aushebeln und kann gleichzeitig größere Textmengen aus dem Gadget entgegennehmen (was ich früher mit dem Navigation-Callback, einem GET-Formular und den URL-Prozeduren gelöst habe, aber nur eine relativ kleine Datenmenge verarbeiten konnte). Man könnte es auch realisieren, in dem man einen HTML-Button nutzt. Aber dann müsste der komplette Dialog in selbigen sein. Eigentlich wollte ich das Gadget als Host für TinyMCE nutzen und Richtext mit allem, was möglich ist (Tabellen, Bildimport usw.), realisieren. So könnte man alle anderen Eingaben in nativen Gadgets machen und nur der Richtext kommt aus dem Wegbadget.Shardik hat geschrieben:Hier hatte ich 2015 schon einmal zusammengefasst, welche in Windows vorhandenen WebGadget-Features in Linux und MacOS fehlen und wie man in Linux und MacOS HTML-Code ins WebGadget lädt und einen Klick auf einen HTML-Button erkennt.
Code: Alles auswählen
OpenWindow(0,100,100,800,650,"TEST")
WebGadget(1,0,0,800,600,"file://D:/test.html")
ButtonGadget(2,5,605,150,40,"Klick")
Repeat
Event = WindowEvent()
Button = EventGadget()
If Button = 2
SetGadgetText(1,"file://D:/test.html#test")
EndIf
Until Event = #PB_Event_CloseWindow
Code: Alles auswählen
<!DOCTYPE html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Beispiel: beforeunload Event</title>
</head>
<body>
<h1>Beispiel: beforeunload Event</h1>
<main>
<p>Verlassen Sie die Seite, damit der beforeunload-Event-Handler ausgelöst wird.</p>
</main>
<script async>
document.addEventListener('DOMContentLoaded', function () {
window.addEventListener('hashchange', function() {
alert(location.hash);
},false);
});
</script>
</body>
</html>