WebViewGadget()
Syntax
Ergebnis = WebViewGadget(#Gadget, x, y, Breite, Höhe [, Flags])Beschreibung
Erstellt ein neues Webview-Gadget in der aktuellen Gadget-Liste. Bei Bedarf kann mit WebViewProxy() ein Proxy eingerichtet werden.
Parameter
#Gadget Eine Nummer zur Identifizierung des neuen Gadgets. #PB_Any kann verwendet werden, um diese Nummer automatisch zu generieren. x, y, Breite, Höhe Die Position und Abmessungen des neuen Gadgets. Flags (optional) Flags zum Ändern des Gadget-Verhaltens. Es kann (mit dem Operator '|') aus einer der folgenden Konstanten zusammengesetzt sein: #PB_WebView_Debug: Aktiviert den Menüpunkt "Inspizieren" (englisch 'inspect') im Kontextmenü, um den Web-Inspektor und die Konsole anzuzeigen.
Rückgabewert
Bei Erfolg ungleich Null, ansonsten Null. Wenn #PB_Any als #Gadget-Parameter verwendet wurde, beinhaltet der Rückgabewert die automatisch generierte Gadget-Nummer bei Erfolg.
Anmerkungen
Verwenden Sie nach der Erstellung BindWebViewCallback(), um mit dem JavaScript-Code der Benutzeroberfläche zu interagieren. Darüber hinaus können auch gängige Gadget-Befehle wie ResizeGadget() oder HideGadget() mit dem Steuerelement verwendet werden.
Die folgenden Funktionen können verwendet werden, um das WebViewGadget zu beeinflussen:
- SetGadgetText(): Ändert die aktuelle URL. Es kann sich um eine lokale Datei-URL wie 'file://c:/purebasic/svn/webview.html' oder eine reguläre HTTP-URL handeln. Wenn Sie eine lokale Datei-URL verwenden, muss es sich um den vollständigen Pfadnamen handeln. Sie können die lokale URL einfach erstellen, indem Sie 'file://' zum Pfadnamen hinzufügen.
- SetGadgetItemText(): Mit #PB_WebView_HtmlCode als 'Eintrag' kann HTML-Code in das Gadget gestreamt werden. Das HTML wird als nicht vertrauenswürdiger lokaler Inhalt behandelt und einige Berechtigungen sind nicht zulässig.
- GetGadgetAttribute() : Mit #PB_WebView_ICoreController als 'Attribut' ermöglicht Ihnen die Nutzung der Funktionen vom ICoreWebView2 (nur auf Windows).
Hinweis: das WebViewGadget() wird nicht auf dem QT-Subsystem unterstützt.
Beispiel: mit lokalen HTML- und CSS-Dateien
Procedure IncrementJS(JsonParameters$)
Static i
Debug "IncrementJS "+JsonParameters$
i+1
ProcedureReturn UTF8(~"{ \"count\": "+Str(i)+ "}")
EndProcedure
Procedure ComputeJS(JsonParameters$)
Debug "ComputeJS "+JsonParameters$
ProcedureReturn UTF8(~"150")
EndProcedure
OpenWindow(0, 100, 100, 400, 400, "Hello", #PB_Window_SystemMenu)
WebViewGadget(0, 0, 0, 400, 400)
SetGadgetText(0, "file://" + #PB_Compiler_Home + "examples/sources/Data/WebView/webview.html")
BindWebViewCallback(0, "increment", @IncrementJS())
BindWebViewCallback(0, "compute", @ComputeJS())
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Beispiel: mit Inline-HTML-Code
Procedure IncrementJS(JsonParameters$)
Static i
Debug "IncrementJS "+JsonParameters$
i+1
ProcedureReturn UTF8(~"{ \"count\": "+Str(i)+ "}")
EndProcedure
Procedure ComputeJS(JsonParameters$)
Debug "ComputeJS "+JsonParameters$
ProcedureReturn UTF8(~"150")
EndProcedure
OpenWindow(0, 100, 100, 400, 400, "Hello", #PB_Window_SystemMenu)
WebViewGadget(0, 0, 0, 400, 400)
SetGadgetItemText(0, #PB_WebView_HtmlCode,
~"<button id=\"increment\">Tap me</button>\n"+
~"<div>You tapped <span id=\"count\">0</span> time(s).</div>\n"+
~"<button id=\"compute\">Compute</button>\n"+
~"<div>Result of computation: <span id=\"compute-result\">0</span></div>\n"+
~"<script>\n"+
~" const [incrementElement, countElement, computeElement, "+
~"computeResultElement] =\n"+
~" document.querySelectorAll(\"#increment, #count, #compute, "+
~"#compute-result\");\n"+
~" document.addEventListener(\"DOMContentLoaded\", () => {\n"+
~" incrementElement.addEventListener(\"click\", () => {\n"+
~" window.increment().then(result => {\n"+
~" countElement.textContent = result.count;\n"+
~" });\n"+
~" });\n"+
~" computeElement.addEventListener(\"click\", () => {\n"+
~" computeElement.disabled = true;\n"+
~" window.compute(6, 7).then(result => {\n"+
~" computeResultElement.textContent = result;\n"+
~" computeElement.disabled = false;\n"+
~" });\n"+
~" });\n"+
~" });\n"+
~"</script>")
BindWebViewCallback(0, "increment", @IncrementJS())
BindWebViewCallback(0, "compute", @ComputeJS())
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Beispiel: mit deaktiviertem Rechtsklick-Menü
Html$ = ~"<html style=\"margin:0px;height:100%;width:100%\">"+
~"<body oncontextmenu=\"return false;\" style=\"margin:0px;min-height:100%;width:100%\">"+
~"<button id=\"displayInfo\">Display Info</button>"+
~"</body></html>\n"
OpenWindow(0, 100, 100, 400, 400, "No right click UI", #PB_Window_SystemMenu)
WebViewGadget(0, 0, 0, 400, 400)
SetGadgetItemText(0, #PB_WebView_HtmlCode, Html$)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Beispiel: mit Nutzung des ICoreWebView2Controller (nur auf Windows)
OpenWindow(0, 100, 100, 800, 600, "Hello", #PB_Window_SystemMenu)
TrackBarGadget(1, 0 , 0, 800, 30, 10, 400):SetGadgetState(1, 100)
WebViewGadget(0, 0, 30, 800, 600, #PB_WebView_Debug)
; ICoreController Interface ermitteln
;
Controller.ICoreWebView2Controller = GetGadgetAttribute(0, #PB_WebView_ICoreController)
; ICoreWebView2 Interface ermitteln
;
Controller\get_CoreWebView2(@Core.ICoreWebView2)
Core\Navigate("https://www.purebasic.com")
; core\
DataSection
IID_ICoreWebView2Controller2:
Data.l $C979903E
Data.w $D4CA, $4228
Data.b $92, $EB, $47, $EE, $3F, $A9, $6E, $AB
EndDataSection
If Controller\QueryInterface(?IID_ICoreWebView2Controller2, @Controller2.ICoreWebView2Controller2) = #S_OK
Debug "ICoreWebView2Controller2 found: " + Controller2
Else
Debug "Can't query ICoreWebView2Controller2"
EndIf
Repeat
Event = WaitWindowEvent()
If event = #PB_Event_Gadget And EventGadget() = 1
Controller\put_ZoomFactor(GetGadgetState(1)/100)
EndIf
Until Event = #PB_Event_CloseWindow
Siehe auch
WebViewExecuteScript(), BindWebViewCallback(), WebViewProxy()
Unterstützte OS
Alle