Webgadget und window.print

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Webgadget und window.print

Beitrag von Kukulkan »

Hast Du meinen Trick weiter oben mal versucht?
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Webgadget und window.print

Beitrag von TroaX »

Interessant. Da scheint es wohl keine Konsequente Linie zu geben. Bei dem einen scheint es zu gehen. Beim anderen nicht. Aber sowas habe ich schon vermutet. Musste ja auch feststellen, das die meisten Möglichkeiten mit dem Webgadget auch nur unter Windows funktionieren (Navigation-Callback, Kontext-Menü blockieren usw.).

Dann muss es am Ende eben wieder mal Windows Only sein.

@Kukulkan: Dein Trick beschreibt nur, wie du aus deiner Pure-Basic Anwendung heraus den Druckdialog des Gadgets triggern kannst. Der Kern des Dialogs liegt in der Javascript-Funktion window.print(). Ob du diese Funktion jetzt wie du erst in das Markup einsetzt und neu lädst oder du die Funktion mit einem Klick auf den Link ausführst, macht keinen Unterschied. In beiden Fällen soll der Dialog öffnen. Bei #NULL funktioniert dies aber nicht ;)
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Webgadget und window.print

Beitrag von Kukulkan »

Eventuell ist unter Linux noch immer JS as default deaktiviert...

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
Aus diesem Thread:
http://www.purebasic.fr/english/viewtop ... 13&t=68507

__________________________________________________
Domain angepasst
Bild
12.01.2018
RSBasic
Zuletzt geändert von Kukulkan am 12.01.2018 13:22, insgesamt 1-mal geändert.
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Webgadget und window.print

Beitrag von TroaX »

Danke aber leider kann ich das zur Zeit selber nicht testen. Am WE wird jetzt erstmal der Silent-Webserver als Handler für das Gadget geschrieben.Dann scheue ich mal weiter ^^
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Webgadget und window.print

Beitrag von #NULL »

mit EnableJSforWebGadget() funktioniert sowohl der alert() als auch der Druckdialog. :allright:

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
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Webgadget und window.print

Beitrag von TroaX »

Klasse vielen Dank ^^
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Webgadget und window.print

Beitrag von Shardik »

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.).
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.

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.
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Webgadget und window.print

Beitrag von TroaX »

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.
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.

Vielleicht ist es so besser erklärt ;)
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Webgadget und window.print

Beitrag von TroaX »

Soo auch das letzte Problem ist gelöst. Ich mache das zwar über Javascript. Aber trotzdem kann man es triggern, in dem man über das Javascript den Wechsel des Anchor-Hashes abfängt. Diesen kann man sich direkt auch ausgeben lassen oder auswerten. Wenn der Hash stimmt, dann wird das Formular mit Javascript einfach abgesendet, der Schattenserver nimmt die Daten an und gibt sie an PB weiter.

PB:

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
test.html:

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>
Damit sollte das, was ich vorhabe, problemlos funlktionieren ^^
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Antworten