Seite 1 von 1

Webgadget und LINK

Verfasst: 23.05.2016 14:31
von Velindos
Hallo Leute,

wenn ich den Navigations Callback vom Webgadget einsetze, liefert er mir alle mögliche Links ins Stringgadget!

Nun habe ich mit LinkQuittierung = 0 auch nichts erreicht, weil dann die Google Link aus der Google Suche nicht mehr geht!

Code: Alles auswählen

Procedure SuppressJavaScriptErrorMessages(WebGadget)
  
  Protected MyWebGadget.IWebBrowser2
  
  MyWebGadget = GetWindowLongPtr_(GadgetID(0), #GWL_USERDATA)
  MyWebGadget\put_Silent(#True) ; Suppress JavaScript error messages.
  
EndProcedure

Procedure NavigationCallback(Gadget, Url$)
  If Url$= "http://www.purebasic.com/news.php"
    MessageRequester("", "No news today!")
    ProcedureReturn #False
  Else
    If LinkQuittierung = 0
      SetGadgetText(5,Url$)
      LinkQuittierung = 1
    EndIf
    ProcedureReturn #True
  EndIf
EndProcedure

If OpenWindow(0, 0, 0, 600, 320, "WebGadget-Link", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  WebGadget(0, 10, 10, 580, 280, "http://www.purebasic.com")
  ButtonGadget(1,1,300,60,20,"Google")
  ButtonGadget(2,60,300,60,20,"Purebasic")
  ButtonGadget(3,120,300,60,20,"Welt")
  ButtonGadget(4,180,300,60,20,"Standard")
  StringGadget(5,240, 300,300,20,"Link")
  ProgressBarGadget(6, 0, 295, WindowWidth(0)-2, 3, 0, 100)
  SetGadgetAttribute(0, #PB_Web_NavigationCallback, @NavigationCallback())
  
  ; 			WebObject.IWebBrowser2 = GetWindowLongPtr_(GadgetID(0),#GWLP_USERDATA)
  ; 	If WebObject
  ; 		WebObject\put_Silent(#True)
  ; 		WebObject\put_Left(1)
  ; 	EndIf
  SuppressJavaScriptErrorMessages(0)
  
  
  Define Event,EventGadget,EventType
  ; ------------------
  Repeat
    Event = WaitWindowEvent()
    EventGadget = EventGadget()
    EventType = EventType()
    
    Select Event
        
      Case #WM_LBUTTONUP
        LinkQuittierung = 0
        
      Case #PB_Event_Gadget
        
        If EventGadget = 0
          If EventType = #PB_EventType_DownloadStart
            Debug "DownloadStart"
            HideGadget(6,0)
          EndIf
          If EventType = #PB_EventType_DownloadProgress
            SetGadgetState(6,GetGadgetAttribute(0,#PB_Web_Progress))
          EndIf
          If EventType = #PB_EventType_PopupMenu
          EndIf
          If EventType = #PB_EventType_TitleChange
          EndIf
          If EventType = #PB_EventType_DownloadEnd
            Debug "DownloadEnd"
            HideGadget(6,1)
          EndIf
        EndIf
        
        Select EventGadget
            
          Case 0:  SetGadgetText(5,GetGadgetText(0)) ; <============
            
          Case 1 : SetGadgetText(0,"http://www.google.com")
          Case 2 : SetGadgetText(0,"http://www.purebasic.com")
          Case 3 : SetGadgetText(0,"http://www.welt.de/newsticker/")
          Case 4 :SetGadgetText(0,"http://www.standard.at")
        EndSelect     
        
      Case #WM_KEYFIRST
        ; Web Navigation über LinkFeld
        If EventwParam() = #VK_RETURN
          Debug "ENTER gedrückt"
          If GetActiveGadget() = 5
            Debug "ENTER Taste hat FOCUS"
            SetGadgetText(0,GetGadgetText(5))
          EndIf
        EndIf
        
        
    EndSelect
    ; ESC Taste
    ; 		If GetAsyncKeyState_(#VK_ESCAPE):      End:    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf
Help, jemand noch eine Idee?

Gruss ... Velindos

Re: Webgadget und LINK

Verfasst: 23.05.2016 16:32
von udg
und welchen link soll es liefern? den der aktuellen seite?

Re: Webgadget und LINK

Verfasst: 23.05.2016 18:43
von Velindos
Hallo,

ja, den der aktuellen Page. Was ja am Anfang der Fall ist, aber dann rattert er los. Man sieht alle anderen Aufrufe. Grund, ist das ich mir den Aufruf abspeichern möchte!

Gruss ... Velindos

Re: Webgadget und LINK

Verfasst: 23.05.2016 20:58
von udg
funktioniert hier soweit ich das richtig erkenne? so wie es soll. es zeigt immer die url an, die gerade aufgerufen wird und im debug fenster rattert- (arbeitet) es nur so lang, bis die seite fertig geladen wurde.

Re: Webgadget und LINK

Verfasst: 23.05.2016 22:12
von Kiffi
vielleicht sollte man erst einmal klären, was "rattern" bedeutet ;-)

Grüße ... Peter

Re: Webgadget und LINK

Verfasst: 24.05.2016 09:14
von Velindos
Hallo,
das rattern kommt vom Callback, wenn er irgend ein Aufruf ladet, der ... jetzt kommt´s ... nicht von mir kommt sondern von der Page!

Habe die Sache mit "#WM_LBUTTONUP" getrickst!

Jetzt bräuchte ich noch einen Tip, den meine Progressbar zeigt nichts an, wenn er ladet! Ist meine Mühle(dzt.W7/x64) hinüber oder wie???

Code: Alles auswählen

EnableExplicit
Enumeration
  #Win
  #Webgadget
  #Progressbar
  #Btn1
  #Btn2
  #Btn3
  #Btn4
  #Btn5
  #Link
EndEnumeration
OpenWindow(#Win, 0, 0, 800,700, "WebGadget Fortschritt", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(#Btn1,1,WindowHeight(#Win)-20 ,60,20,"Standard")
ButtonGadget(#Btn2,60,WindowHeight(#Win)-20 ,60,20,"Welt")
ButtonGadget(#Btn3,120,WindowHeight(#Win)-20 ,60,20,"Google")
ButtonGadget(#Btn4,180,WindowHeight(#Win)-20 ,60,20,"Purebasic")
ButtonGadget(#Btn5,240,WindowHeight(#Win)-20 ,60,20,"news.google")
StringGadget(#Link,WindowWidth(#Win)-300, WindowHeight(#Win)-20 ,300,20,"Link")
WebGadget(#Webgadget, 10, 10, 790, 560, "https://news.google.de/")
; WebGadget(#Webgadget, 10, 10, 790, 560, "http://www.standard.at")
ProgressBarGadget(#Progressbar,10, 580, 790, 20,0,1000000)
Define Event, EventGadget, EventType
Repeat
  Event = WaitWindowEvent()
  EventGadget = EventGadget()
  EventType = EventType()
  Select Event
      
    Case #WM_LBUTTONUP
      SetGadgetText(#Link,GetGadgetText(#Webgadget))
      
    Case #PB_Event_Gadget
      Select EventGadget
          
        Case #Webgadget
          Select EventType
            Case #PB_EventType_DownloadStart
              Debug "DownloadStart"
              Debug "#PB_Web_ProgressMax = "+ GetGadgetAttribute(#Webgadget,#PB_Web_ProgressMax ) 
              SetGadgetAttribute(#Progressbar,#PB_ProgressBar_Maximum,GetGadgetAttribute(#Webgadget,#PB_Web_ProgressMax))
            Case #PB_EventType_DownloadProgress
              Debug "DownloadProgress: " + Str(GetGadgetAttribute(#Webgadget, #PB_Web_Progress))
              Debug "DownloadProgressMax: " + Str(GetGadgetAttribute(#Webgadget, #PB_Web_ProgressMax))
              SetGadgetState(#Progressbar,GetGadgetAttribute(#Webgadget,#PB_Web_Progress))
            Case #PB_EventType_DownloadEnd
              Debug "DownloadEnd"
              SetGadgetState(#Progressbar,0)
          EndSelect 
          
        Case #Btn1 :SetGadgetText(#Webgadget,"http://www.standard.at")
          SetGadgetText(#Link,GetGadgetText(#Webgadget))
          SetGadgetAttribute(#Progressbar,#PB_ProgressBar_Maximum,100)
          SetGadgetState(#Progressbar,100)
        Case #Btn2 : SetGadgetText(#Webgadget,"http://www.welt.de/newsticker/")
          SetGadgetText(#Link,GetGadgetText(#Webgadget))
          SetGadgetAttribute(#Progressbar,#PB_ProgressBar_Maximum,100)
          SetGadgetState(#Progressbar,100)
        Case #Btn3 : SetGadgetText(#Webgadget,"http://www.google.com")
          SetGadgetText(#Link,GetGadgetText(#Webgadget))
          SetGadgetAttribute(#Progressbar,#PB_ProgressBar_Maximum,100)
          SetGadgetState(#Progressbar,100)
        Case #Btn4 : SetGadgetText(#Webgadget,"http://www.purebasic.com")
          SetGadgetText(#Link,GetGadgetText(#Webgadget))
          SetGadgetAttribute(#Progressbar,#PB_ProgressBar_Maximum,100)
          SetGadgetState(#Progressbar,100)
        Case #Btn5 : SetGadgetText(#Webgadget,"https://news.google.de/")
          SetGadgetText(#Link,GetGadgetText(#Webgadget))
          SetGadgetAttribute(#Progressbar,#PB_ProgressBar_Maximum,100)
          SetGadgetState(#Progressbar,100)
      EndSelect
  EndSelect   
Until Event = #PB_Event_CloseWindow
Gruss ... Velindos

Re: Webgadget und LINK

Verfasst: 25.05.2016 08:03
von Velindos
Hallo Leute,
hier mal ein Beispiel welches im Webgadget nicht geladen wird!

Code: Alles auswählen

EnableExplicit

Enumeration
  #Window_0
  #Webgadget
  #ProgressBar
EndEnumeration

Global   Browser.IWebBrowser2
Define Event

OpenWindow(#Window_0, 0, 0, 1024, 600, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ProgressBarGadget(#ProgressBar, 10, 570, WindowWidth(#Window_0) - 20, 20, 0, 0)

WebGadget(#Webgadget, 10, 10, WindowWidth(#Window_0) - 20, WindowHeight(#Window_0) - 50, "http://www.standard.at")
Browser.IWebBrowser2 = GetWindowLongPtr_(GadgetID(#Webgadget),#GWLP_USERDATA)
If Browser
  Browser\put_Silent(#True)
  Browser\put_Left(1)
EndIf


Repeat
  Event = WaitWindowEvent()
  
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case #Webgadget
          
          If GetGadgetAttribute(#Webgadget, #PB_Web_ProgressMax) = 0
            SetGadgetState(#ProgressBar,0)
          EndIf
          
          Select EventType()
            Case #PB_EventType_DownloadProgress
              Debug "Progress"
              Debug GetGadgetAttribute(#Webgadget, #PB_ProgressBar_Maximum) 
              Debug GetGadgetAttribute(#Webgadget, #PB_Web_ProgressMax) 
              Debug GetGadgetAttribute(#Webgadget, #PB_Web_Progress) 
              SetGadgetAttribute(#ProgressBar, #PB_ProgressBar_Maximum, GetGadgetAttribute(#Webgadget, #PB_Web_ProgressMax))
              SetGadgetState(#ProgressBar, GetGadgetAttribute(#Webgadget, #PB_Web_Progress))
          EndSelect
          
      EndSelect
      
  EndSelect   
  
Until Event = #PB_Event_CloseWindow
Kann mir jemand sagen warum ladet das Ding nicht fertig, sondern bleibt hängen?

Gruss ... Velindos

Re: Webgadget und LINK

Verfasst: 25.05.2016 09:14
von RSBasic
Das ist ein Internet Explorer-Problem. IE kommt anscheinend mit einer Javascript-Datei nicht klar bzw. der JS-Code ist nicht mit älteren IE-Versionen kompatibel und es entsteht eine Endlosschleife.
Irgendwann nach einem Timeout meldet sich der IE mit folgender Meldung:
Webbrowser hat geschrieben:Ausführung des Skripts abbrechen?

Ein Skript auf dieser Seite verursacht eine Browserverzögerung.
Eine weitere Ausführung des Skripts kann dazu führen,
dass der Computer nicht mehr reagiert.
Da kannst du nicht viel machen außer diese Seite zu vermeiden oder einen anderen Browser mit Hilfe eines Plugins zu verwenden.
Alternativ kannst du die IE-Kompatibilität mit Hilfe der Registry höher stellen: https://msdn.microsoft.com/en-us/librar ... 85%29.aspx

Re: Webgadget und LINK

Verfasst: 25.05.2016 13:16
von Velindos
Hallo RSBasic,
danke für deinen Tip. Habe die Sache aufgegriffen und funzt. Aber beim Refresh und bei der Link Anzeige habe ich noch Probleme!

Daher habe ich folgende Lösung entwickelt

Code: Alles auswählen

; Global UrlMerker = 0 
Global merker = 0
Global Callbackstate = 0


Procedure NavigationCallback(Gadget, Url$) 
	Static Browser.IWebBrowser2
	Static UrlMerker 
	; 	Static merker
	; 	Static Callbackstate
	
	Browser.IWebBrowser2 = GetWindowLongPtr_(GadgetID(0),#GWLP_USERDATA)
	
	Debug "=>>>>>>>>>>>>>>>>  Url$= "+Url$
	
	
	
	If merker = 1
		SetWindowTitle(0,Url$)
		StatusBarText(0, 0, Url$)
		
		DropUrl$=Url$
		Url$=""
		Callbackstate = 1
		merker =0
	EndIf
	
	
	; 	If Callbackstate = 0
	
	If Url$=DropUrl$ 
		MessageRequester("", "No news today!") 
		; 																										SetWindowTitle(0,URL$)
		ProcedureReturn #False 
	Else 
		
		Browser\get_ReadyState(@isReady)
		;--> Determine the load state
		
		Select isReady
			Case 1
				Debug "Seite Loading Begin"
				StatusBarText(0, 0, "Seite Loading Begin")
				; 					SetWindowTitle(0,DropUrl$)
				
			Case 2
				; 				Debug "Seite Loaded"
				StatusBarText(0, 0, "Seite Loaded")
				SetWindowTitle(0,Url$)
				
			Case 3
				Debug "Seite java"
				StatusBarText(0, 0, "Seite java")
				
				; 				SetWindowTitle(0,URL$)
				Debug DropUrl$
				If FindString(Url$,"javascript",0)
					ProcedureReturn  #False
				Else
					ProcedureReturn  #True
				EndIf
				
			Case 4
				Debug "Seite Fertig"
				StatusBarText(0, 0, "Seite Fertig")
				; 				SetWindowTitle(0,URL$)
				; 											SetGadgetText(0,URL$)
				
				Callbackstate = 0
				ProcedureReturn #True 
		EndSelect
		
		ProcedureReturn #True 
	EndIf
	
	; 	EndIf
	
EndProcedure 

If OpenWindow(0, 0, 0, 1000, 600, "WebGadget  Java", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
	CreateStatusBar(0,WindowID(0))
	AddStatusBarField(1000)
	
	; 	WebGadget(0, 10, 10, 580, 280, "http://www.purebasic.com") 
	DropUrl$ = "http://www.standard.at"
	WebGadget(0, 10, 10, 1000, 500, DropUrl$) 
	SetGadgetAttribute(0, #PB_Web_NavigationCallback, @NavigationCallback())
	ButtonGadget(1, 10,600-50,20,20,"X")
	ButtonGadget(2, 30,600-50,20,20,"X")
	Repeat
		Event = WaitWindowEvent()
		Select Event
				; GADGET
			Case #WM_LBUTTONDOWN
				Merker = 1
				Debug "button"
				
		EndSelect
		
		If Event = #PB_Event_Gadget
			
			Select EventGadget()
				Case 1
					DropUrl$ = "http://www.purebasic.com"
					SetGadgetText(0, DropUrl$)
				Case 2
					DropUrl$ = "http://www.standard.at"
					SetGadgetText(0, DropUrl$)
			EndSelect
		EndIf
		
	Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf
Für Anregung bin ich noch zu haben!!!

Gruss ... Velindos!