Seite 1 von 2

WebKitGTK WebView Gadget

Verfasst: 19.01.2011 23:15
von cptdark
Das Projekt wird in http://forums.purebasic.com/german/view ... =8&t=23313 fortgeführt.

Da ja unter Linux x64 das WebGadget nicht verfügbar ist, habe ich mal angefangen, ein Interface für das WebKitGTK zu schreiben. Genauer für den WebView-Teil davon. Aus dem WebKit werden nur die nötigen Funktionen importiert. Das ganze ist an OOP angelehnt.

System: Ubuntu 10.10 x64, benötigtes/getestetes Package: libwebkit-1.0-2

Unter x86 nicht getestet, sollte aber auch funktionieren, sofern die Bibliothek installiert und der Pfad richtig gesetzt ist: AWPB_InitWebKit("/usr/lib/libwebkit-1.0.so.2") Rückgabe ist #True bei Erfolg, sonst #False.

Das WebView-Gadget wird in einem Container-Gadget erzeugt. Dieses wird automatisch angelegt. Die übergebene GadgetID gehört zu diesem Container. Die Events der WebView können nicht mit den PureBasic-Befehlen abgefangen werden, dafür sind die Callbacks nötig. Scrollbalken werden automatisch hinzugefügt, falls nötig.

awwebview.pbi

Code: Alles auswählen

;{ WebKit-Imports
PrototypeC.i ____AWPB_WebKit_Proto_web_view_new()
PrototypeC.i ____AWPB_WebKit_Proto_web_view_load_uri(*webview, uri.p-ascii)
PrototypeC.i ____AWPB_WebKit_Proto_web_frame_get_uri(*frame)
PrototypeC.i ____AWPB_WebKit_Proto_web_view_get_load_status(*webview)
PrototypeC.i ____AWPB_WebKit_Proto_web_view_load_string(*webview, content.p-ascii, mime_type.p-ascii, encoding.p-ascii, base_uri.p-ascii)
PrototypeC.i ____AWPB_WebKit_Proto_web_view_get_title(*webview)
PrototypeC.i ____AWPB_WebKit_Proto_download_get_uri(*download)
PrototypeC   ____AWPB_WebKit_Proto_web_policy_decision_ignore(*decision)
PrototypeC   ____AWPB_WebKit_Proto_web_policy_decision_download(*decision)
PrototypeC   ____AWPB_WebKit_Proto_web_policy_decision_use(*decision)
PrototypeC.i ____AWPB_WebKit_Proto_network_request_get_uri(*request)
PrototypeC   ____AWPB_WebKit_Proto_web_view_go_back(*web_view)
PrototypeC   ____AWPB_WebKit_Proto_web_view_go_forward(*web_view)
PrototypeC   ____AWPB_WebKit_Proto_web_view_stop_loading(*web_view)

Structure ____AWPB_WebKit_table
  LibName.s
  LibHandle.i

  web_view_new.____AWPB_WebKit_Proto_web_view_new
  web_view_load_uri.____AWPB_WebKit_Proto_web_view_load_uri
  web_frame_get_uri.____AWPB_WebKit_Proto_web_frame_get_uri
  web_view_get_load_status.____AWPB_WebKit_Proto_web_view_get_load_status
  web_view_load_string.____AWPB_WebKit_Proto_web_view_load_string
  web_view_get_title.____AWPB_WebKit_Proto_web_view_get_title
  download_get_uri.____AWPB_WebKit_Proto_download_get_uri
  web_policy_decision_ignore.____AWPB_WebKit_Proto_web_policy_decision_ignore
  web_policy_decision_download.____AWPB_WebKit_Proto_web_policy_decision_download
  web_policy_decision_use.____AWPB_WebKit_Proto_web_policy_decision_use
  network_request_get_uri.____AWPB_WebKit_Proto_network_request_get_uri
  web_view_go_back.____AWPB_WebKit_Proto_web_view_go_back
  web_view_go_forward.____AWPB_WebKit_Proto_web_view_go_forward
  web_view_stop_loading.____AWPB_WebKit_Proto_web_view_stop_loading
EndStructure
Define ____AWPB_WebKit.____AWPB_WebKit_table
Define ____AWPB_WebKit_lib_initialized.b = #False
Enumeration
  #____AWPB_WEBKIT_NAVIGATION_ACCEPT
  #____AWPB_WEBKIT_NAVIGATION_IGNORE
  #____AWPB_WEBKIT_NAVIGATION_DOWNLOAD
EndEnumeration
;}
;{ support functions
Procedure.b AWPB_InitWebKit(LibraryFile$)
  Shared ____AWPB_WebKit, ____AWPB_WebKit_lib_initialized
  
  If Not ____AWPB_WebKit_lib_initialized
    With ____AWPB_WebKit
      \LibName   = LibraryFile$
      \LibHandle = OpenLibrary(#PB_Any, LibraryFile$)
      If IsLibrary(\LibHandle)
        \web_view_new                 = GetFunction(\LibHandle, "webkit_web_view_new")
        \web_view_load_uri            = GetFunction(\LibHandle, "webkit_web_view_load_uri")
        \web_frame_get_uri            = GetFunction(\LibHandle, "webkit_web_frame_get_uri")
        \web_view_get_load_status     = GetFunction(\LibHandle, "webkit_web_view_get_load_status")
        \web_view_load_string         = GetFunction(\LibHandle, "webkit_web_view_load_string")
        \web_view_get_title           = GetFunction(\LibHandle, "webkit_web_view_get_title")
        \download_get_uri             = GetFunction(\LibHandle, "webkit_download_get_uri")
        \web_policy_decision_ignore   = GetFunction(\LibHandle, "webkit_web_policy_decision_ignore")
        \web_policy_decision_download = GetFunction(\LibHandle, "webkit_web_policy_decision_download")
        \web_policy_decision_use      = GetFunction(\LibHandle, "webkit_web_policy_decision_use")
        \network_request_get_uri      = GetFunction(\LibHandle, "webkit_network_request_get_uri")
        \web_view_go_back             = GetFunction(\LibHandle, "webkit_web_view_go_back")
        \web_view_go_forward          = GetFunction(\LibHandle, "webkit_web_view_go_forward")
        \web_view_stop_loading        = GetFunction(\LibHandle, "webkit_web_view_stop_loading")
        
        ____AWPB_WebKit_lib_initialized = \web_view_new And \web_view_load_uri And \web_frame_get_uri And \web_view_get_load_status And \web_view_load_string And \web_view_get_title And \download_get_uri And \web_policy_decision_download And \web_policy_decision_ignore And \web_policy_decision_use And \network_request_get_uri And \web_view_go_back And \web_view_go_forward And \web_view_stop_loading        
        
      EndIf
    EndWith
  EndIf
  
  ProcedureReturn ____AWPB_WebKit_lib_initialized
EndProcedure
Procedure   ____AWPB_WebKit_GTKSignalConnect(*Widget, Signal.s, *Function, *user_data)
  CompilerIf #PB_Compiler_Unicode
    Protected *SignalASCII, SignalLen.i
    
    SignalLen = Len(Signal)
    *SignalASCII = AllocateMemory(SignalLen + 2)
    If *SignalASCII
      PokeS(*SignalASCII, Signal, SignalLen, #PB_Ascii)
      CompilerIf #GTK_MAJOR_VERSION = 1
        gtk_signal_connect_(*Widget, *SignalASCII, *Function, *user_data)
      CompilerElse
        g_signal_connect_data_(*Widget, *SignalASCII, *Function, *user_data, 0, 0)
      CompilerEndIf
      FreeMemory(*SignalASCII)
    EndIf
  CompilerElse
    CompilerIf #GTK_MAJOR_VERSION = 1
      gtk_signal_connect_(*Widget, @Signal, *Function, *user_data)
    CompilerElse
      g_signal_connect_data_(*Widget, @Signal, *Function, *user_data, 0, 0)
    CompilerEndIf
  CompilerEndIf
EndProcedure
;}
;{ Callback Prototypes
Prototype   ____AWPB_WebView_CB_OnHoveringOverLink(title.s, uri.s)
Prototype   ____AWPB_WebView_CB_OnLoadProgressChanged(progress.l)
Prototype.l ____AWPB_WebView_CB_OnNavigationRequested(uri.s)
Prototype   ____AWPB_WebView_CB_OnPopulatePopup(*menu.GtkMenu)
Prototype   ____AWPB_WebView_CB_OnStatusBarTextChanged(arg1.s)
Prototype   ____AWPB_WebView_CB_OnTitleChanged(title.s)

;}
;{ WebKit-Object
Interface AWPB_WebView
    Destroy                           ()
    LoadURI                           (URI.s)
    LoadFile                          (FullFileName.s)
    LoadString                        (Content.s, Encoding.s = #NULL$, MimeType.s = #NULL$, BaseURI.s = "")
    Clear                             ()
    Hide                              (State)
    Disable                           (State)
    GadgetHeight.i                    ()
    GadgetWidth.i                     ()
    GadgetX.i                         ()
    GadgetY.i                         ()
    ResizeGadget                      (x, y, Width, Height)
    Back                              ()
    Forward                           ()
    Stop                              ()
    OnHoveringOverLink                (*callback.____AWPB_WebView_CB_OnHoveringOverLink)
    OnLoadProgressChanged             (*callback.____AWPB_WebView_CB_OnLoadProgressChanged)
    OnNavigationRequested             (*callback.____AWPB_WebView_CB_OnNavigationRequested)
    OnPopulatePopup                   (*callback.____AWPB_WebView_CB_OnPopulatePopup)
    OnStatusBarTextChanged            (*callback.____AWPB_WebView_CB_OnStatusBarTextChanged)
    OnTitleChanged                    (*callback.____AWPB_WebView_CB_OnTitleChanged)
    
EndInterface
Structure ____AWPB_WebView
    *vt.AWPB_WebView
    ContainerID.i
    *WebView
    *Scroller
    
    *OnHoveringOverLink.____AWPB_WebView_CB_OnHoveringOverLink
    *OnLoadProgressChanged.____AWPB_WebView_CB_OnLoadProgressChanged
    *OnNavigationRequested.____AWPB_WebView_CB_OnNavigationRequested
    *OnPopulatePopup.____AWPB_WebView_CB_OnPopulatePopup
    *OnStatusBarTextChanged.____AWPB_WebView_CB_OnStatusBarTextChanged
    *OnTitleChanged.____AWPB_WebView_CB_OnTitleChanged
    
    InitialPageLoaded.b    
EndStructure
;{ Constants
#AWPB_WEBKIT_NAVIGATION_ACCEPT   = #____AWPB_WEBKIT_NAVIGATION_ACCEPT
#AWPB_WEBKIT_NAVIGATION_IGNORE   = #____AWPB_WEBKIT_NAVIGATION_IGNORE
#AWPB_WEBKIT_NAVIGATION_DOWNLOAD = #____AWPB_WEBKIT_NAVIGATION_DOWNLOAD
;}
;{ Event Callbacks
ProcedureCDLL   ____AWPB_WebView_OnHoveringOverLinkCB(*webView, *title, *uri, *gdg.____AWPB_WebView)
  Protected title.s, uri.s
  
  If *gdg\OnHoveringOverLink
    If *title : title = PeekS(*title, -1, #PB_Ascii) : Else : title = "" : EndIf
    If *uri   : uri   = PeekS(*uri,   -1, #PB_Ascii) : Else : uri   = "" : EndIf
  
    *gdg\OnHoveringOverLink(title, uri)
  EndIf
EndProcedure
ProcedureCDLL   ____AWPB_WebView_OnLoadProgressChangedCB(*WebView, progress.l, *gdg.____AWPB_WebView)
  If *gdg\OnLoadProgressChanged
    *gdg\OnLoadProgressChanged(progress)
  EndIf
EndProcedure
ProcedureCDLL.l ____AWPB_WebView_OnNavigationRequestedCB(*WebView, *frame, *request, *gdg.____AWPB_WebView)
  Shared ____AWPB_WebKit
  Protected *uri, uri.s, action.l
  
  If *gdg\OnNavigationRequested
    *uri = ____AWPB_WebKit\network_request_get_uri(*request)
    If *uri
      If *gdg\InitialPageLoaded
        uri    = PeekS(*uri, -1, #PB_Ascii)
        action = *gdg\OnNavigationRequested(uri)
      
        ProcedureReturn action
      Else
        *gdg\InitialPageLoaded = #True
      EndIf
    EndIf
  EndIf
  
  ProcedureReturn #____AWPB_WEBKIT_NAVIGATION_ACCEPT
EndProcedure
ProcedureCDLL   ____AWPB_WebView_OnPopulatePopupCB(*WebView, *menu.GtkMenu, *gdg.____AWPB_WebView)
  If *gdg\OnPopulatePopup
    *gdg\OnPopulatePopup(*menu)
  EndIf
EndProcedure
ProcedureCDLL   ____AWPB_WebView_OnStatusBarTextChangedCB(*WebKit, *arg1, *gdg.____AWPB_WebView)
  Protected arg1.s
  
  If *gdg\OnStatusBarTextChanged
    If *arg1
      arg1 = PeekS(*arg1, -1, #PB_Ascii)
      *gdg\OnStatusBarTextChanged(arg1)
    EndIf
  EndIf
EndProcedure
ProcedureCDLL   ____AWPB_WebView_OnTitleChangedCB(*WebView, *frame, *title, *gdg.____AWPB_WebView)
  Protected title.s
  
  If *gdg\OnTitleChanged
    If *title
      title = PeekS(*title, -1, #PB_Ascii)
      *gdg\OnTitleChanged(title)
    EndIf
  EndIf
EndProcedure

;}
;{ Member Procedures
Procedure.i AWPB_WebView(GadgetID, x, y, Width, Height, Flags)
  Shared ____AWPB_WebKit, ____AWPB_WebKit_lib_initialized
  Protected *this.____AWPB_WebView, res.b
  
  If ____AWPB_WebKit_lib_initialized
    res   = #False
    *this = AllocateMemory(SizeOf(____AWPB_WebView))
    If *this 
      *this\vt   = ?____AWPB_WebView_VT
      If GadgetID = #PB_Any
        *this\ContainerID = ContainerGadget(#PB_Any, x, y, Width, Height, Flags)
        If *this\ContainerID : res = #True : EndIf
      Else
        *this\ContainerID = GadgetID
        If ContainerGadget(GadgetID, x, y, Width, Height, Flags) : res = #True : EndIf
      EndIf
      If res
        CloseGadgetList()
        
        *this\OnHoveringOverLink     = #Null
        *this\OnLoadProgressChanged  = #Null
        *this\OnNavigationRequested  = #Null
        *this\OnPopulatePopup        = #Null
        *this\OnStatusBarTextChanged = #Null
        *this\OnTitleChanged         = #Null
        *this\InitialPageLoaded      = #False

        *this\Scroller = gtk_scrolled_window_new_(#Null, #Null)
        If *this\Scroller
          gtk_scrolled_window_set_policy_(*this\Scroller, #GTK_POLICY_AUTOMATIC, #GTK_POLICY_AUTOMATIC)
          gtk_widget_set_size_request_(*this\Scroller, GadgetWidth(*this\ContainerID), GadgetHeight(*this\ContainerID))
          *this\WebView  = ____AWPB_webkit\web_view_new()
          If *this\WebView
            gtk_container_add_(*this\Scroller, *this\WebView)
            gtk_container_add_(GadgetID(*this\ContainerID), *this\Scroller)
            
            ____AWPB_WebKit_GTKSignalConnect(*this\WebView, "hovering-over-link",      @____AWPB_WebView_OnHoveringOverLinkCB(),     *this)
            ____AWPB_WebKit_GTKSignalConnect(*this\WebView, "load-progress-changed",   @____AWPB_WebView_OnLoadProgressChangedCB(),  *this)
            ____AWPB_WebKit_GTKSignalConnect(*this\WebView, "navigation-requested",    @____AWPB_WebView_OnNavigationRequestedCB(),  *this)
            ____AWPB_WebKit_GTKSignalConnect(*this\WebView, "populate-popup",          @____AWPB_WebView_OnPopulatePopupCB(),        *this)
            ____AWPB_WebKit_GTKSignalConnect(*this\WebView, "status-bar-text-changed", @____AWPB_WebView_OnStatusBarTextChangedCB(), *this)
            ____AWPB_WebKit_GTKSignalConnect(*this\WebView, "title-changed",           @____AWPB_WebView_OnTitleChangedCB(),         *this)

            gtk_widget_set_events_(*this\WebView, #GDK_ALL_EVENTS_MASK)
            
            gtk_widget_show_(*this\Scroller)
            gtk_widget_show_(*this\WebView)
            
            ProcedureReturn *this
          EndIf
        EndIf
      EndIf
      FreeMemory(*this)
    EndIf
  EndIf
  
  ProcedureReturn #Null
EndProcedure
Procedure.i ____AWPB_WebView_Destroy(*this.____AWPB_WebView)
  If IsGadget(*this\ContainerID)
    FreeGadget(*this\ContainerID)
  EndIf  
  FreeMemory(*this)  
  ProcedureReturn #Null
EndProcedure
Procedure   ____AWPB_WebView_LoadURI(*this.____AWPB_WebView, URI.s)
  Shared ____AWPB_WebKit
  
  If URI <> ""
    *this\InitialPageLoaded = #False
    ____AWPB_WebKit\web_view_load_uri(*this\WebView, URI)
  EndIf  
EndProcedure
Procedure   ____AWPB_WebView_LoadFile(*this.____AWPB_WebView, FullFileName.s)
  Shared ____AWPB_WebKit
  
  If FullFileName <> ""
    *this\InitialPageLoaded = #False
    ____AWPB_WebKit\web_view_load_uri(*this\WebView, "file://" + FullFileName)
  EndIf  
EndProcedure
Procedure   ____AWPB_WebView_LoadString(*this.____AWPB_WebView, Content.s, MimeType.s, Encoding.s, BaseURI.s)
  Shared ____AWPB_WebKit
  
  ____AWPB_WebKit\web_view_load_string(*this\WebView, Content, MimeType, Encoding, BaseURI)
EndProcedure
Procedure   ____AWPB_WebView_Clear(*this.____AWPB_WebView)
  Shared ____AWPB_WebKit
  
  ____AWPB_WebKit\web_view_load_string(*this\WebView, "", "text/plain", #NULL$, "")  
EndProcedure
Procedure   ____AWPB_WebView_Hide(*this.____AWPB_WebView, State)
  HideGadget(*this\ContainerID, State)
EndProcedure
Procedure   ____AWPB_WebView_Disable(*this.____AWPB_WebView, State)
  DisableGadget(*this\ContainerID, State)
EndProcedure
Procedure.i ____AWPB_WebView_GadgetHeight(*this.____AWPB_WebView)
  ProcedureReturn GadgetHeight(*this\ContainerID)
EndProcedure
Procedure.i ____AWPB_WebView_GadgetWidth(*this.____AWPB_WebView)
  ProcedureReturn GadgetWidth(*this\ContainerID)
EndProcedure
Procedure.i ____AWPB_WebView_GadgetX(*this.____AWPB_WebView)
  ProcedureReturn GadgetX(*this\ContainerID)
EndProcedure
Procedure.i ____AWPB_WebView_GadgetY(*this.____AWPB_WebView)
  ProcedureReturn GadgetY(*this\ContainerID)
EndProcedure
Procedure   ____AWPB_WebView_ResizeGadget(*this.____AWPB_WebView, x, y, Width, Height)
  ResizeGadget(*this\ContainerID, x, y, Width, Height)
  gtk_widget_set_size_request_(*this\Scroller, GadgetWidth(*this\ContainerID), GadgetHeight(*this\ContainerID))
EndProcedure
Procedure   ____AWPB_WebView_Back(*this.____AWPB_WebView)
  Shared ____AWPB_WebKit
  
  ____AWPB_WebKit\web_view_go_back(*this\WebView)
EndProcedure
Procedure   ____AWPB_WebView_Forward(*this.____AWPB_WebView)
  Shared ____AWPB_WebKit
  
  ____AWPB_WebKit\web_view_go_forward(*this\WebView)
EndProcedure
Procedure   ____AWPB_WebView_Stop(*this.____AWPB_WebView)
  Shared ____AWPB_WebKit
  
  ____AWPB_WebKit\web_view_stop_loading(*this\WebView)
EndProcedure
Procedure   ____AWPB_WebView_Set_OnHoveringOverLink(*this.____AWPB_WebView, *callback.____AWPB_WebView_CB_OnHoveringOverLink)
  *this\OnHoveringOverLink = *callback
EndProcedure
Procedure   ____AWPB_WebView_Set_OnLoadProgressChanged(*this.____AWPB_WebView, *callback.____AWPB_WebView_CB_OnLoadProgressChanged)
  *this\OnLoadProgressChanged = *callback
EndProcedure
Procedure   ____AWPB_WebView_Set_OnNavigationRequested(*this.____AWPB_WebView, *callback.____AWPB_WebView_CB_OnNavigationRequested)
  *this\OnNavigationRequested = *callback
EndProcedure
Procedure   ____AWPB_WebView_Set_OnPopulatePopup(*this.____AWPB_WebView, *callback.____AWPB_WebView_CB_OnPopulatePopup)
  *this\OnPopulatePopup = *callback
EndProcedure
Procedure   ____AWPB_WebView_Set_OnStatusBarTextChanged(*this.____AWPB_WebView, *callback.____AWPB_WebView_CB_OnStatusBarTextChanged)
  *this\OnStatusBarTextChanged = *callback
EndProcedure
Procedure   ____AWPB_WebView_Set_OnTitleChanged(*this.____AWPB_WebView, *callback.____AWPB_WebView_CB_OnTitleChanged)
  *this\OnTitleChanged = *callback
EndProcedure
;}

DataSection ;{ Virtual Function Table
____AWPB_WebView_VT:
  Data.i @____AWPB_WebView_Destroy()
  Data.i @____AWPB_WebView_LoadURI()
  Data.i @____AWPB_WebView_LoadFile()
  Data.i @____AWPB_WebView_LoadString()
  Data.i @____AWPB_WebView_Clear()
  Data.i @____AWPB_WebView_Hide()
  Data.i @____AWPB_WebView_Disable()
  Data.i @____AWPB_WebView_GadgetHeight()
  Data.i @____AWPB_WebView_GadgetWidth()
  Data.i @____AWPB_WebView_GadgetX()
  Data.i @____AWPB_WebView_GadgetY()
  Data.i @____AWPB_WebView_ResizeGadget()
  Data.i @____AWPB_WebView_Back()
  Data.i @____AWPB_WebView_Forward()
  Data.i @____AWPB_WebView_Stop()
  Data.i @____AWPB_WebView_Set_OnHoveringOverLink()
  Data.i @____AWPB_WebView_Set_OnLoadProgressChanged()
  Data.i @____AWPB_WebView_Set_OnNavigationRequested()
  Data.i @____AWPB_WebView_Set_OnPopulatePopup()
  Data.i @____AWPB_WebView_Set_OnStatusBarTextChanged()
  Data.i @____AWPB_WebView_Set_OnTitleChanged()
  
EndDataSection ;}
;}

Demo 1:

Code: Alles auswählen

EnableExplicit

XIncludeFile "awwebview.pbi"

; Callback Procedures
Procedure TitleChangedCB(title.s)
  PrintN("New Page Title: " + title)
;  Debug "New Page Title: " + title
EndProcedure
Procedure LinkOverCB(title.s, link.s)
  PrintN("Mouse over Link: " + link + " * Title: " + title)
;  Debug "Mouse over Link: " + link
EndProcedure
Procedure.i NavigationRequestedCB(link.s)
  PrintN("Navigate: " + link)
;  Debug "Navigate: " + link
  ProcedureReturn #AWPB_WEBKIT_NAVIGATION_IGNORE
EndProcedure
Procedure StatusBarTextCB(text.s)
  PrintN("Status Text: " + text)
;  Debug "Status Text: " + text
EndProcedure
Procedure PopulatePopupCB(*Menu.GtkMenu)
  PrintN("Popup called")
;  Debug "Popup called"
EndProcedure
Procedure ProgressChangedCB(progress.l)
  PrintN("Progress: " + Str(progress))
;  Debug "Progress: " + Str(progress)
EndProcedure
   
Define *webview.AWPB_WebView, event

OpenConsole()

If AWPB_InitWebKit("/usr/lib/libwebkit-1.0.so.2")
  OpenWindow(0, 0, 0, 800, 400, "WebKit Demo")
  
  *webview = AWPB_WebView(1, 5, 5, 790, 390, #PB_Container_Raised)
  If *webview
    *webview\OnHoveringOverLink(@LinkOverCB())
    *webview\OnLoadProgressChanged(@ProgressChangedCB())
    *webview\OnNavigationRequested(@NavigationRequestedCB())
    *webview\OnPopulatePopup(@PopulatePopupCB())
    *webview\OnStatusBarTextChanged(@StatusBarTextCB())
    *webview\OnTitleChanged(@TitleChangedCB())
    
    *webview\LoadURI("http://www.purebasic.com")
  
    Repeat
      event = WaitWindowEvent()
    Until event = #PB_Event_CloseWindow
  EndIf
Else
  MessageRequester("Fehler", "Kann WebKit-Library nicht initialisieren!")
EndIf

Demo 2: (Anpassung der WebGadget-Demo aus der Anleitung)

Code: Alles auswählen

EnableExplicit

XIncludeFile "awwebview.pbi"

; Callback Procedures
Procedure.i NavigationCallback(url.s)
  If Url = "http://www.purebasic.com/news.php" 
    MessageRequester("", "No news today!") 
    ProcedureReturn #AWPB_WEBKIT_NAVIGATION_IGNORE
  Else 
    ProcedureReturn #AWPB_WEBKIT_NAVIGATION_ACCEPT
  EndIf 
EndProcedure

Define *webview.AWPB_WebView

If AWPB_InitWebKit("/usr/lib/libwebkit-1.0.so.2")
  If OpenWindow(0, 0, 0, 600, 300, "WebGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
    *webview = AWPB_WebView(0, 10, 10, 580, 280, #PB_Container_Raised)
    If *webview
      *webview\OnNavigationRequested(@NavigationCallback())
      *webview\LoadURI("http://www.purebasic.com")
  
      Repeat 
      Until WaitWindowEvent() = #PB_Event_CloseWindow
    EndIf
  EndIf
Else
  MessageRequester("Fehler", "Kann WebKit-Library nicht initialisieren!")
EndIf

Demo 3: (Anpassung des Mini-Browser Examples; Downloads nicht möglich)

Code: Alles auswählen

EnableExplicit

XIncludeFile "awwebview.pbi"

Define *webview.AWPB_WebView, Event

Procedure ResizeWebWindow()
  Shared *webview
  
  *webview\ResizeGadget(#PB_Ignore, #PB_Ignore, WindowWidth(0), WindowHeight(0) - 52)
  ResizeGadget(4, #PB_Ignore, #PB_Ignore, WindowWidth(0)-185, #PB_Ignore)
  ResizeGadget(5, WindowWidth(0)-25, #PB_Ignore, #PB_Ignore, #PB_Ignore)
  ResizeGadget(6, #PB_Ignore, #PB_Ignore, WindowWidth(0), #PB_Ignore)
EndProcedure

If AWPB_InitWebKit("/usr/lib/libwebkit-1.0.so.2")
  If OpenWindow(0, 100, 200, 500, 300, "PureBasic MiniBrowser v1.0", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
  
    CreateStatusBar(0, WindowID(0))
      AddStatusBarField(#PB_Ignore)
      StatusBarText(0, 0, "Welcome to the world's smallest Browser ! :)", 0)
        
    ButtonGadget(1,   0, 0, 50, 25, "Back")
    ButtonGadget(2,  50, 0, 50, 25, "Next")
    ButtonGadget(3, 100, 0, 50, 25, "Stop")
  
    StringGadget(4, 155, 5, 0, 20, "http://www.purebasic.com")
    
    ButtonGadget(5, 0, 0, 25, 25, "Go")
    
    Frame3DGadget(6, 0, 30, 0, 2, "", 2) ; Nice little separator
    
    *webview = AWPB_WebView(10, 0, 31, 0, 0, #PB_Container_Raised)
    If *webview
      *webview\LoadURI("http://www.purebasic.com")
    
      AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
    
      ResizeWebWindow()
    
      Repeat
        Event = WaitWindowEvent()
        
        Select Event
          Case #PB_Event_Gadget
          
            Select EventGadget()
              Case 1
                *webview\Back()
              Case 2
                *webview\Forward()

              Case 3
                *webview\Stop()
              
              Case 5
                *webview\LoadURI(GetGadgetText(4))
                
            EndSelect      
          
          Case #PB_Event_Menu ; We only have one shortcut
            *webview\LoadURI(GetGadgetText(4))
    
          Case #PB_Event_SizeWindow
            ResizeWebWindow()
          
        EndSelect
          
      Until Event = #PB_Event_CloseWindow
    EndIf
  EndIf
Else
  MessageRequester("Fehler", "Kann WebKit-Library nicht initialisieren!")
EndIf

Re: WebKitGTK WebView Gadget

Verfasst: 20.01.2011 22:42
von remi_meier
Hab hier ein kleines Programm, welches dir ev. das Leben
etwas einfacher machen könnte. Hab's aber nicht getestet,
weshalb vielleicht nur Teile davon nutzbar sind.

Download:
http://remi.secretly.de/downloads/gir2pbv2.tar.bz2

Dann (Ubuntu 10.10):
sudo aptitude install libwebkit-dev
Dann (im Ordner von gir2pb):
./gir2pb.py /usr/share/gir-1.0/WebKit-1.0.gir /usr/share/gir-1.0/JSCore-1.0.gir > webkitjscore.pbi
Und man erhält webkitjscore.pbi:

Code: Alles auswählen

;-------------- FILE: /usr/share/gir-1.0/WebKit-1.0.gir --------------
;- NAMESPACE: WebKit from "libwebkit-1.0.so.2"

Enumeration ; LoadStatus
	#WEBKIT_LOAD_PROVISIONAL = 0
	#WEBKIT_LOAD_COMMITTED = 1
	#WEBKIT_LOAD_FINISHED = 2
	#WEBKIT_LOAD_FIRST_VISUALLY_NON_EMPTY_LAYOUT = 3
	#WEBKIT_LOAD_FAILED = 4
EndEnumeration

Enumeration ; WebViewTargetInfo
	#WEBKIT_WEB_VIEW_TARGET_INFO_HTML = 0
	#WEBKIT_WEB_VIEW_TARGET_INFO_TEXT = 1
	#WEBKIT_WEB_VIEW_TARGET_INFO_IMAGE = 2
	#WEBKIT_WEB_VIEW_TARGET_INFO_URI_LIST = 3
	#WEBKIT_WEB_VIEW_TARGET_INFO_NETSCAPE_URL = 4
EndEnumeration

Enumeration ; NetworkError
	#WEBKIT_NETWORK_ERROR_FAILED = 399
	#WEBKIT_NETWORK_ERROR_TRANSPORT = 300
	#WEBKIT_NETWORK_ERROR_UNKNOWN_PROTOCOL = 301
	#WEBKIT_NETWORK_ERROR_CANCELLED = 302
	#WEBKIT_NETWORK_ERROR_FILE_DOES_NOT_EXIST = 303
EndEnumeration

Enumeration ; EditingBehavior
	#WEBKIT_EDITING_BEHAVIOR_MAC = 0
	#WEBKIT_EDITING_BEHAVIOR_WINDOWS = 1
EndEnumeration

Enumeration ; DownloadError
	#WEBKIT_DOWNLOAD_ERROR_CANCELLED_BY_USER = 0
	#WEBKIT_DOWNLOAD_ERROR_DESTINATION = 1
	#WEBKIT_DOWNLOAD_ERROR_NETWORK = 2
EndEnumeration

Enumeration ; PluginError
	#WEBKIT_PLUGIN_ERROR_FAILED = 299
	#WEBKIT_PLUGIN_ERROR_CANNOT_FIND_PLUGIN = 200
	#WEBKIT_PLUGIN_ERROR_CANNOT_LOAD_PLUGIN = 201
	#WEBKIT_PLUGIN_ERROR_JAVA_UNAVAILABLE = 202
	#WEBKIT_PLUGIN_ERROR_CONNECTION_CANCELLED = 203
	#WEBKIT_PLUGIN_ERROR_WILL_HANDLE_LOAD = 204
EndEnumeration

Enumeration ; WebNavigationReason
	#WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED = 0
	#WEBKIT_WEB_NAVIGATION_REASON_FORM_SUBMITTED = 1
	#WEBKIT_WEB_NAVIGATION_REASON_BACK_FORWARD = 2
	#WEBKIT_WEB_NAVIGATION_REASON_RELOAD = 3
	#WEBKIT_WEB_NAVIGATION_REASON_FORM_RESUBMITTED = 4
	#WEBKIT_WEB_NAVIGATION_REASON_OTHER = 5
EndEnumeration

Enumeration ; NavigationResponse
	#WEBKIT_NAVIGATION_RESPONSE_ACCEPT = 0
	#WEBKIT_NAVIGATION_RESPONSE_IGNORE = 1
	#WEBKIT_NAVIGATION_RESPONSE_DOWNLOAD = 2
EndEnumeration

Enumeration ; CacheModel
	#WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER = 1
	#WEBKIT_CACHE_MODEL_WEB_BROWSER = 2
EndEnumeration

Enumeration ; DownloadStatus
	#WEBKIT_DOWNLOAD_STATUS_ERROR = -1
	#WEBKIT_DOWNLOAD_STATUS_CREATED = 0
	#WEBKIT_DOWNLOAD_STATUS_STARTED = 1
	#WEBKIT_DOWNLOAD_STATUS_CANCELLED = 2
	#WEBKIT_DOWNLOAD_STATUS_FINISHED = 3
EndEnumeration

Enumeration ; PolicyError
	#WEBKIT_POLICY_ERROR_FAILED = 199
	#WEBKIT_POLICY_ERROR_CANNOT_SHOW_MIME_TYPE = 100
	#WEBKIT_POLICY_ERROR_CANNOT_SHOW_URL = 101
	#WEBKIT_POLICY_ERROR_FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE = 102
	#WEBKIT_POLICY_ERROR_CANNOT_USE_RESTRICTED_PORT = 103
EndEnumeration

CompilerIf Defined(WebKitDownloadClass, #PB_Structure)
CompilerElse
Structure WebKitDownloadClass
	*parent_class
	*webkit_reserved0
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitDownloadPrivate, #PB_Structure)
CompilerElse
Structure WebKitDownloadPrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitGeolocationPolicyDecisionClass, #PB_Structure)
CompilerElse
Structure WebKitGeolocationPolicyDecisionClass
	*parent_class
	*webkit_reserved0
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitGeolocationPolicyDecisionPrivate, #PB_Structure)
CompilerElse
Structure WebKitGeolocationPolicyDecisionPrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitHitTestResultClass, #PB_Structure)
CompilerElse
Structure WebKitHitTestResultClass
	*parent_class
	*webkit_reserved0
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitHitTestResultPrivate, #PB_Structure)
CompilerElse
Structure WebKitHitTestResultPrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitNetworkRequestClass, #PB_Structure)
CompilerElse
Structure WebKitNetworkRequestClass
	*parent_class
	*webkit_reserved0
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitNetworkRequestPrivate, #PB_Structure)
CompilerElse
Structure WebKitNetworkRequestPrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitNetworkResponseClass, #PB_Structure)
CompilerElse
Structure WebKitNetworkResponseClass
	*parent_class
	*webkit_reserved0
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitNetworkResponsePrivate, #PB_Structure)
CompilerElse
Structure WebKitNetworkResponsePrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitSecurityOriginClass, #PB_Structure)
CompilerElse
Structure WebKitSecurityOriginClass
	*parent_class
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
	*webkit_reserved4
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitSecurityOriginPrivate, #PB_Structure)
CompilerElse
Structure WebKitSecurityOriginPrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitSoupAuthDialogClass, #PB_Structure)
CompilerElse
Structure WebKitSoupAuthDialogClass
	*parent_class
	*current_toplevel
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebBackForwardListClass, #PB_Structure)
CompilerElse
Structure WebKitWebBackForwardListClass
	*parent_class
	*webkit_reserved0
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebBackForwardListPrivate, #PB_Structure)
CompilerElse
Structure WebKitWebBackForwardListPrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebDataSourceClass, #PB_Structure)
CompilerElse
Structure WebKitWebDataSourceClass
	*parent_class
	*webkit_reserved0
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebDataSourcePrivate, #PB_Structure)
CompilerElse
Structure WebKitWebDataSourcePrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebDatabaseClass, #PB_Structure)
CompilerElse
Structure WebKitWebDatabaseClass
	*parent_class
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
	*webkit_reserved4
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebDatabasePrivate, #PB_Structure)
CompilerElse
Structure WebKitWebDatabasePrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebFrameClass, #PB_Structure)
CompilerElse
Structure WebKitWebFrameClass
	*parent_class
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
	*webkit_reserved4
	*webkit_reserved5
	*webkit_reserved6
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebFramePrivate, #PB_Structure)
CompilerElse
Structure WebKitWebFramePrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebHistoryItemClass, #PB_Structure)
CompilerElse
Structure WebKitWebHistoryItemClass
	*parent_class
	*webkit_reserved0
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebHistoryItemPrivate, #PB_Structure)
CompilerElse
Structure WebKitWebHistoryItemPrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebInspectorClass, #PB_Structure)
CompilerElse
Structure WebKitWebInspectorClass
	*parent_class
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
	*webkit_reserved4
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebInspectorPrivate, #PB_Structure)
CompilerElse
Structure WebKitWebInspectorPrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebNavigationActionClass, #PB_Structure)
CompilerElse
Structure WebKitWebNavigationActionClass
	*parent_class
	*webkit_reserved0
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebNavigationActionPrivate, #PB_Structure)
CompilerElse
Structure WebKitWebNavigationActionPrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebPolicyDecisionClass, #PB_Structure)
CompilerElse
Structure WebKitWebPolicyDecisionClass
	*parent_class
	*webkit_reserved0
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebPolicyDecisionPrivate, #PB_Structure)
CompilerElse
Structure WebKitWebPolicyDecisionPrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebResourceClass, #PB_Structure)
CompilerElse
Structure WebKitWebResourceClass
	*parent_class
	*webkit_reserved0
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebResourcePrivate, #PB_Structure)
CompilerElse
Structure WebKitWebResourcePrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebSettingsClass, #PB_Structure)
CompilerElse
Structure WebKitWebSettingsClass
	*parent_class
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
	*webkit_reserved4
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebSettingsPrivate, #PB_Structure)
CompilerElse
Structure WebKitWebSettingsPrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebViewClass, #PB_Structure)
CompilerElse
Structure WebKitWebViewClass
	*parent_class
	*create_web_view
	*web_view_ready
	*close_web_view
	*navigation_requested
	*window_object_cleared
	*choose_file
	*script_alert
	*script_confirm
	*script_prompt
	*console_message
	*select_all
	*cut_clipboard
	*copy_clipboard
	*paste_clipboard
	*move_cursor
	*set_scroll_adjustments
	*undo
	*redo
	*webkit_reserved0
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebViewPrivate, #PB_Structure)
CompilerElse
Structure WebKitWebViewPrivate
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebWindowFeaturesClass, #PB_Structure)
CompilerElse
Structure WebKitWebWindowFeaturesClass
	*parent_class
	*webkit_reserved1
	*webkit_reserved2
	*webkit_reserved3
	*webkit_reserved4
EndStructure
CompilerEndIf

CompilerIf Defined(WebKitWebWindowFeaturesPrivate, #PB_Structure)
CompilerElse
Structure WebKitWebWindowFeaturesPrivate
EndStructure
CompilerEndIf
ImportC "/usr/lib/libwebkit-1.0.so.2"
	webkit_download_new.i(*request)
	webkit_download_start(*download)
	webkit_download_cancel(*download)
	webkit_download_get_uri.i(*download)
	webkit_download_get_network_request.i(*download)
	webkit_download_get_network_response.i(*download)
	webkit_download_get_suggested_filename.i(*download)
	webkit_download_get_destination_uri.i(*download)
	webkit_download_set_destination_uri(*download, destination_uri.p-utf8)
	webkit_download_get_progress.d(*download)
	webkit_download_get_elapsed_time.d(*download)
	webkit_download_get_total_size.q(*download)
	webkit_download_get_current_size.q(*download)
	webkit_download_get_status.l(*download)
	webkit_network_request_new.i(uri.p-utf8)
	webkit_network_request_set_uri(*networkrequest, uri.p-utf8)
	webkit_network_request_get_uri.i(*networkrequest)
	webkit_network_request_get_message.i(*networkrequest)
	webkit_network_response_new.i(uri.p-utf8)
	webkit_network_response_set_uri(*networkresponse, uri.p-utf8)
	webkit_network_response_get_uri.i(*networkresponse)
	webkit_network_response_get_message.i(*networkresponse)
	webkit_security_origin_get_protocol.i(*securityorigin)
	webkit_security_origin_get_host.i(*securityorigin)
	webkit_security_origin_get_port.l(*securityorigin)
	webkit_security_origin_get_web_database_usage.q(*securityorigin)
	webkit_security_origin_get_web_database_quota.q(*securityorigin)
	webkit_security_origin_set_web_database_quota(*securityorigin, quota.q)
	webkit_security_origin_get_all_web_databases.i(*securityorigin)
	webkit_web_back_forward_list_new_with_web_view.i(*web_view)
	webkit_web_back_forward_list_go_forward(*webbackforwardlist)
	webkit_web_back_forward_list_go_back(*webbackforwardlist)
	webkit_web_back_forward_list_contains_item.l(*webbackforwardlist, *history_item)
	webkit_web_back_forward_list_go_to_item(*webbackforwardlist, *history_item)
	webkit_web_back_forward_list_get_forward_list_with_limit.i(*webbackforwardlist, limit.l)
	webkit_web_back_forward_list_get_back_list_with_limit.i(*webbackforwardlist, limit.l)
	webkit_web_back_forward_list_get_back_item.i(*webbackforwardlist)
	webkit_web_back_forward_list_get_current_item.i(*webbackforwardlist)
	webkit_web_back_forward_list_get_forward_item.i(*webbackforwardlist)
	webkit_web_back_forward_list_get_nth_item.i(*webbackforwardlist, index.l)
	webkit_web_back_forward_list_get_back_length.l(*webbackforwardlist)
	webkit_web_back_forward_list_get_forward_length.l(*webbackforwardlist)
	webkit_web_back_forward_list_get_limit.l(*webbackforwardlist)
	webkit_web_back_forward_list_set_limit(*webbackforwardlist, limit.l)
	webkit_web_back_forward_list_add_item(*webbackforwardlist, *history_item)
	webkit_web_back_forward_list_clear(*webbackforwardlist)
	webkit_web_data_source_new.i()
	webkit_web_data_source_new_with_request.i(*request)
	webkit_web_data_source_get_web_frame.i(*webdatasource)
	webkit_web_data_source_get_initial_request.i(*webdatasource)
	webkit_web_data_source_get_request.i(*webdatasource)
	webkit_web_data_source_get_encoding.i(*webdatasource)
	webkit_web_data_source_is_loading.l(*webdatasource)
	webkit_web_data_source_get_data.i(*webdatasource)
	webkit_web_data_source_get_main_resource.i(*webdatasource)
	webkit_web_data_source_get_unreachable_uri.i(*webdatasource)
	webkit_web_data_source_get_subresources.i(*webdatasource)
	webkit_web_database_get_security_origin.i(*webdatabase)
	webkit_web_database_get_name.i(*webdatabase)
	webkit_web_database_get_display_name.i(*webdatabase)
	webkit_web_database_get_expected_size.q(*webdatabase)
	webkit_web_database_get_size.q(*webdatabase)
	webkit_web_database_get_filename.i(*webdatabase)
	webkit_web_database_remove(*webdatabase)
	webkit_web_frame_new.i(*web_view)
	webkit_web_frame_get_web_view.i(*webframe)
	webkit_web_frame_get_name.i(*webframe)
	webkit_web_frame_get_title.i(*webframe)
	webkit_web_frame_get_uri.i(*webframe)
	webkit_web_frame_get_parent.i(*webframe)
	webkit_web_frame_load_uri(*webframe, uri.p-utf8)
	webkit_web_frame_load_string(*webframe, content.p-utf8, mime_type.p-utf8, encoding.p-utf8, base_uri.p-utf8)
	webkit_web_frame_load_alternate_string(*webframe, content.p-utf8, base_url.p-utf8, unreachable_url.p-utf8)
	webkit_web_frame_load_request(*webframe, *request)
	webkit_web_frame_stop_loading(*webframe)
	webkit_web_frame_reload(*webframe)
	webkit_web_frame_find_frame.i(*webframe, name.p-utf8)
	webkit_web_frame_get_global_context.i(*webframe)
	webkit_web_frame_print_full.i(*webframe, *operation, *action)
	webkit_web_frame_print(*webframe)
	webkit_web_frame_get_load_status.l(*webframe)
	webkit_web_frame_get_horizontal_scrollbar_policy.i(*webframe)
	webkit_web_frame_get_vertical_scrollbar_policy.i(*webframe)
	webkit_web_frame_get_data_source.i(*webframe)
	webkit_web_frame_get_provisional_data_source.i(*webframe)
	webkit_web_frame_get_security_origin.i(*webframe)
	webkit_web_frame_get_network_response.i(*webframe)
	webkit_web_history_item_new.i()
	webkit_web_history_item_new_with_data.i(uri.p-utf8, title.p-utf8)
	webkit_web_history_item_get_title.i(*webhistoryitem)
	webkit_web_history_item_get_alternate_title.i(*webhistoryitem)
	webkit_web_history_item_set_alternate_title(*webhistoryitem, title.p-utf8)
	webkit_web_history_item_get_uri.i(*webhistoryitem)
	webkit_web_history_item_get_original_uri.i(*webhistoryitem)
	webkit_web_history_item_get_last_visited_time.d(*webhistoryitem)
	webkit_web_history_item_copy.i(*webhistoryitem)
	webkit_web_inspector_get_web_view.i(*webinspector)
	webkit_web_inspector_get_inspected_uri.i(*webinspector)
	webkit_web_inspector_inspect_coordinates(*webinspector, x.d, y.d)
	webkit_web_inspector_show(*webinspector)
	webkit_web_inspector_close(*webinspector)
	webkit_web_navigation_action_get_reason.l(*webnavigationaction)
	webkit_web_navigation_action_set_reason(*webnavigationaction, reason.l)
	webkit_web_navigation_action_get_original_uri.i(*webnavigationaction)
	webkit_web_navigation_action_set_original_uri(*webnavigationaction, originalUri.p-utf8)
	webkit_web_navigation_action_get_button.l(*webnavigationaction)
	webkit_web_navigation_action_get_modifier_state.l(*webnavigationaction)
	webkit_web_navigation_action_get_target_frame.i(*webnavigationaction)
	webkit_web_policy_decision_use(*webpolicydecision)
	webkit_web_policy_decision_ignore(*webpolicydecision)
	webkit_web_policy_decision_download(*webpolicydecision)
	webkit_web_resource_new.i(data_.p-utf8, *size, uri.p-utf8, mime_type.p-utf8, encoding.p-utf8, frame_name.p-utf8)
	webkit_web_resource_get_data.i(*webresource)
	webkit_web_resource_get_uri.i(*webresource)
	webkit_web_resource_get_mime_type.i(*webresource)
	webkit_web_resource_get_encoding.i(*webresource)
	webkit_web_resource_get_frame_name.i(*webresource)
	webkit_web_settings_new.i()
	webkit_web_settings_copy.i(*websettings)
	webkit_web_settings_get_user_agent.i(*websettings)
	webkit_web_view_new.i()
	webkit_web_view_get_title.i(*webview)
	webkit_web_view_get_uri.i(*webview)
	webkit_web_view_set_maintains_back_forward_list(*webview, flag.l)
	webkit_web_view_get_back_forward_list.i(*webview)
	webkit_web_view_go_to_back_forward_item.l(*webview, *item)
	webkit_web_view_can_go_back.l(*webview)
	webkit_web_view_can_go_back_or_forward.l(*webview, steps.l)
	webkit_web_view_can_go_forward.l(*webview)
	webkit_web_view_go_back(*webview)
	webkit_web_view_go_back_or_forward(*webview, steps.l)
	webkit_web_view_go_forward(*webview)
	webkit_web_view_stop_loading(*webview)
	webkit_web_view_open(*webview, uri.p-utf8)
	webkit_web_view_reload(*webview)
	webkit_web_view_reload_bypass_cache(*webview)
	webkit_web_view_load_uri(*webview, uri.p-utf8)
	webkit_web_view_load_string(*webview, content.p-utf8, mime_type.p-utf8, encoding.p-utf8, base_uri.p-utf8)
	webkit_web_view_load_html_string(*webview, content.p-utf8, base_uri.p-utf8)
	webkit_web_view_load_request(*webview, *request)
	webkit_web_view_search_text.l(*webview, text.p-utf8, case_sensitive.l, forward.l, wrap.l)
	webkit_web_view_mark_text_matches.l(*webview, string.p-utf8, case_sensitive.l, limit.l)
	webkit_web_view_set_highlight_text_matches(*webview, highlight.l)
	webkit_web_view_unmark_text_matches(*webview)
	webkit_web_view_get_main_frame.i(*webview)
	webkit_web_view_get_focused_frame.i(*webview)
	webkit_web_view_execute_script(*webview, script.p-utf8)
	webkit_web_view_can_cut_clipboard.l(*webview)
	webkit_web_view_can_copy_clipboard.l(*webview)
	webkit_web_view_can_paste_clipboard.l(*webview)
	webkit_web_view_cut_clipboard(*webview)
	webkit_web_view_copy_clipboard(*webview)
	webkit_web_view_paste_clipboard(*webview)
	webkit_web_view_delete_selection(*webview)
	webkit_web_view_has_selection.l(*webview)
	webkit_web_view_select_all(*webview)
	webkit_web_view_get_editable.l(*webview)
	webkit_web_view_set_editable(*webview, flag.l)
	webkit_web_view_get_copy_target_list.i(*webview)
	webkit_web_view_get_paste_target_list.i(*webview)
	webkit_web_view_set_settings(*webview, *settings)
	webkit_web_view_get_settings.i(*webview)
	webkit_web_view_get_inspector.i(*webview)
	webkit_web_view_get_window_features.i(*webview)
	webkit_web_view_can_show_mime_type.l(*webview, mime_type.p-utf8)
	webkit_web_view_get_transparent.l(*webview)
	webkit_web_view_set_transparent(*webview, flag.l)
	webkit_web_view_get_zoom_level.f(*webview)
	webkit_web_view_set_zoom_level(*webview, zoom_level.f)
	webkit_web_view_zoom_in(*webview)
	webkit_web_view_zoom_out(*webview)
	webkit_web_view_get_full_content_zoom.l(*webview)
	webkit_web_view_set_full_content_zoom(*webview, full_content_zoom.l)
	webkit_web_view_get_encoding.i(*webview)
	webkit_web_view_set_custom_encoding(*webview, encoding.p-utf8)
	webkit_web_view_get_custom_encoding.i(*webview)
	webkit_web_view_move_cursor(*webview, *step_, count.l)
	webkit_web_view_get_load_status.l(*webview)
	webkit_web_view_get_progress.d(*webview)
	webkit_web_view_undo(*webview)
	webkit_web_view_can_undo.l(*webview)
	webkit_web_view_redo(*webview)
	webkit_web_view_can_redo.l(*webview)
	webkit_web_view_set_view_source_mode(*webview, view_source_mode.l)
	webkit_web_view_get_view_source_mode.l(*webview)
	webkit_web_view_get_hit_test_result.i(*webview, *event)
	webkit_web_view_get_icon_uri.i(*webview)
	webkit_web_window_features_new.i()
	webkit_web_window_features_equal.l(*webwindowfeatures, *features2)
	webkit_geolocation_policy_allow(*decision)
	webkit_geolocation_policy_deny(*decision)
	webkit_get_cache_model.l()
	webkit_get_default_session.i()
	webkit_get_default_web_database_quota.q()
	webkit_get_web_database_directory_path.i()
	webkit_remove_all_web_databases()
	webkit_set_cache_model(cache_model.l)
	webkit_set_default_web_database_quota(defaultQuota.q)
	webkit_set_web_database_directory_path(path.p-utf8)
EndImport


;-------------- FILE: /usr/share/gir-1.0/JSCore-1.0.gir --------------
;- NAMESPACE: JSCore from "webkit-1.0"
ImportC "/usr/lib/webkit-1.0"
	JSEvaluateScript()
EndImport
Wie gesagt: ungetestet, aber spart wohl etwas Tipparbeit.

greetz
Remi

Re: WebKitGTK WebView Gadget

Verfasst: 20.01.2011 23:08
von cptdark
Danke ... ja, das nimmt einiges an Tipparbeit (und eventueller Fehlerquellen) ab. :allright:

Auf das ImportC will ich verzichten, da so die Bibliothek On-The-Fly änderbar ist, wohingegen bei ImportC neu kompiliert werden müsste.

Re: WebKitGTK WebView Gadget

Verfasst: 20.01.2011 23:32
von remi_meier
Wenn du ImportC auf eine .so-Datei anwendest, wird sie nur als
Abhängigkeit hinzugefügt unter Linux. D. h. sie wird jedes Mal
beim Start der Executable neu geladen und kann somit durch
eine gleichnamige .so-Datei ersetzt werden.
Falls du aber natürlich erlauben möchtest, eine andere Datei
(z. B. anderer Pfad) anzugeben, hast du natürlich recht. Wobei
das auch per LD_PRELOAD und LD_LIBRARY_PATH gemacht
werden könnte :)

greetz
remi

Re: WebKitGTK WebView Gadget

Verfasst: 21.01.2011 00:14
von ts-soft
Einer Aussage von freak nach, könnte das WebKitGTK bald für das Webgadget genutzt werden.

Wenn Du Zeit hast, warte doch lieber ab :wink:

Re: WebKitGTK WebView Gadget

Verfasst: 21.01.2011 23:16
von cptdark
remi_meier hat geschrieben:... Wobei das auch per LD_PRELOAD und LD_LIBRARY_PATH gemacht werden könnte :) ...
Das ist zwar der "Linux-Weg", find ich persönlich aber zu umständlich. :?
ts-soft hat geschrieben:Einer Aussage von freak nach, könnte das WebKitGTK bald für das Webgadget genutzt werden.
Das wäre nicht schlecht. Und so kompliziert ist es ja nicht (ich denke mal, nicht komplizierter als das Mozilla-Interface).
ts-soft hat geschrieben:Wenn Du Zeit hast, warte doch lieber ab
Das ist das Problem. Linux x86 benutze ich nicht, und Windows will ich nicht unbedingt nehmen. - Da bleiben dann leider nicht viele Alternativen.
Falls das aber wirklich eingebaut wird, dann sollte die Windows-Version ja unter Linux funktionieren, also den Code mein ich jetzt - dann könnte ich das ja einfach wieder austauschen.

PS: der Code oben wurde ausgetauscht, ich habe das ganze jetzt analog zu meinen AWPB-Tools an OOP angelehnt. Desweiteren sind 3 Beispiele bei.

Re: WebKitGTK WebView Gadget

Verfasst: 22.01.2011 01:08
von Dristar
Bei mir geht es nicht.

Mein System Ubuntu 10.04 32bit und PureBasic 4.51

1) beim ersten mal starten kommt " The debugged executable quit unexpectedly"
2 )beim zweiten mal starten kommt zwar ein Windows Fenster , aber in zeile 265 ein Invalid memory access

mfg Dristar

Re: WebKitGTK WebView Gadget

Verfasst: 22.01.2011 09:46
von cptdark
Hallo...

Bitte probiere nochmal.

Ich habe offenbar vergessen, einige Events mit #Null vorzubelegen. :?

Vielleicht war es das ja schon. Der Code in Post 1 wurde modifiziert. (Prozedur AWPB_WebView() um genau zu sein).

Re: WebKitGTK WebView Gadget

Verfasst: 22.01.2011 11:21
von Dristar
@cptdark


geht noch nicht !

Code: Alles auswählen

ProcedureCDLL.b ____AWPB_WebView_EventNavigationRequestedCB(*webview, *frame, *request, *navigation_action, *policy_decision, *gdg.____AWPB_WebView)
  Shared ____AWPB_WebKit
  Protected action.i, *link
 
  If *gdg\OnNavigationRequested
    *link = ____AWPB_WebKit\network_request_get_uri(*request)
    If *link
      If *gdg\InitialPageLoaded
        action = *gdg\OnNavigationRequested(PeekS(*link, -1, #PB_Ascii))
       
        Select action
          Case #____AWPB_WEBKIT_NAVIGATION_ALLOW:    ____AWPB_WebKit\web_policy_decision_use(*policy_decision)
          Case #____AWPB_WEBKIT_NAVIGATION_CANCEL:   ____AWPB_WebKit\web_policy_decision_ignore(*policy_decision)
          Case #____AWPB_WEBKIT_NAVIGATION_DOWNLOAD: ____AWPB_WebKit\web_policy_decision_download(*policy_decision)
        EndSelect

        ProcedureReturn #True
      Else
        *gdg\InitialPageLoaded = #True
      EndIf
    EndIf
  EndIf
 
  ProcedureReturn #False
EndProcedure
Bei ProcedureReturn #False kommt ein Invalid memory access und unter der Console Segmentation fault.
mfg Dristar

Re: WebKitGTK WebView Gadget

Verfasst: 22.01.2011 15:13
von remi_meier
cptdark hat geschrieben:
remi_meier hat geschrieben:... Wobei das auch per LD_PRELOAD und LD_LIBRARY_PATH gemacht werden könnte :) ...
Das ist zwar der "Linux-Weg", find ich persönlich aber zu umständlich. :?
Verständlich :)
cptdark hat geschrieben:
ts-soft hat geschrieben:Einer Aussage von freak nach, könnte das WebKitGTK bald für das Webgadget genutzt werden.
Das wäre nicht schlecht. Und so kompliziert ist es ja nicht (ich denke mal, nicht komplizierter als das Mozilla-Interface).
Wann hat es sich das letzte mal gelohnt auf Updates von PB-Komponenten
zu warten? Eine unabhängige Lösung, die man selbst updaten und mit
vollem Potential verwenden kann, war schon immer besser. Ich will nicht
sagen, dass das PB-Team etwas falsch macht, aber wenn man eine unabhängige
Lösung ohne Nachteile zur Verfügung hat... (vorausgesetzt natürlich man ist
der etwas höheren Komplexität gewachsen) <)