ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by SAPlayer » 16 Dec 2013, 15:55

Ah, das geht, danke!
Bei mir ging das nicht, da ich das HTML über die andere Methode geladen hab (wb.Document.write()). Jetzt mach ich das ganze über ein Temp-File, das ist ja schon viel besser ;)
Vielleicht finden wir/ich ja noch eine Möglichkeit, das auch ohne Temp-File zu regeln, aber es ist auf jeden Fall schonmal deutlich besser als vorher ;)
Und das CSS geht auch ohne Probleme (z.B. die animations)

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by Joe » 16 Dec 2013, 05:12

Es geht doch! Dies hier läuft bei mir:

Code: Select all

html =
(
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="text/javascript">
document.write("DocumentMode: " + document.documentMode);
</script>
)
Gui, Add, ActiveX, x0 y0 w400 h300 vWB, Shell.Explorer
FileAppend, % html, ie_temp.htm
WB.Navigate(A_ScriptDir "\ie_temp.htm")
FileDelete, ie_temp.htm
Gui, Show, w400 h300
return

GuiClose:
ExitApp
Der standardmäßig geladene IE7 ist dann wohl nur der IE7-Modus des im System installierten IE. Gemeinerweise bleibt trotz anderem Modus der UserAgent immer auf IE7, was beim Testen in die Irre führt. Der UserAgent ändert sich bei mir nur, wenn ich den Modus über die Registry ändere, nicht über den Meta-Tag.

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by Joe » 13 Dec 2013, 12:50

Ich denke, es geht nur um einen Modus für Vorgängerversionen, dass man also einen IE9 dazu bringen kann, sich wie IE8 oder IE7 zu verhalten, aber nicht umgekehrt.

Auf StackOverflow hat der Fragesteller offenbar kein ActiveX, das ihm standardmäßig den IE7 lädt; er hat einen IE9 und will ihn im IE9 Standards Mode.

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by SAPlayer » 13 Dec 2013, 10:52

Auch mit !DOCTYPE geht es nicht.
Aber irgendwie geht es ja anscheinend, denn in StackOverflow ging es ja auch um das WebBrowser-Control (das ich auch nutze).

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by Joe » 12 Dec 2013, 16:31

Mit dem DOCTYPE kann man Browser in einen standardkonformen Modus schalten, siehe http://carsten-protsch.de/zwischennetz/ ... itung.html
Diese MS-Syntax macht wahrscheinlich das Gleiche, hat vielleicht noch mehr Optionen.

Ich kann mir aber nicht vorstellen, dass erst der IE7 die Seite lädt, und aufgrund einer Angabe im Dokument sich dann entscheidet, einen neueren IE zu laden. Es geht wohl eher darum, einen neueren IE dazu zu bringen, sich wie ein älterer zu verhalten.

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by SAPlayer » 12 Dec 2013, 14:51

Update:
Ich habe auf StackOverflow gefunden, dass man den jeweiligen Kompatibilitätsmodus des IE auch per Meta-Tag X-UA-Compatible setzen kann. Das sieht dann etwa so aus:

Code: Select all

<meta http-equiv="X-UA-Compatible" content="IE=edge">
Das ist natürlich die schönere Variante, da nicht extra in die Registry geschrieben werden muss und der Modus für jedes Control einzeln gesetzt werden kann.
Leider funktioniert das bei mir allerdings nicht. Ich habe auch schon die Tipps befolgt, den Tag als ersten Tag im head-Bereich zu positionieren (davor sind nur <head>, <html> und <!DOCTYPE>).

Jetzt würde mich mal interessieren, ob du das irgendwie hinbekommst. Wenn nicht, werde ich mal im englischen Bereich fragen. Ich brauch diese Option wirklich und die Registry-Lösung ist einfach sch**ße :?

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by SAPlayer » 06 Dec 2013, 11:17

Ja, das weiß ich schon, nur wie gesagt habe ich schon eine recht einfache Lösung gefunden.
Ich würde ja button nutzen, doch dafür bräuchte ich javascript, mit a kann ich einfach href angeben.

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by Joe » 05 Dec 2013, 16:38

Nur zur Klarstellung, ich meinte es so:

Code: Select all

html =
(
<span id="span1" style="text-decoration:underline; cursor:pointer; color: #009">http://ahkscript.org</span><br><br>
<button id="button1">Button1</button><br><br>
<button id="button2">Button2</button>
)
Gui, Add, ActiveX, x0 y0 w400 h300 vWB, Shell.Explorer
WB.Navigate("about:tabs")
WB.document.write(html)
Gui, Show, w400 h300
ComObjConnect(x := WB.document, "WB_")
return

WB_OnClick(document)
{
  Global WB
  element := document.parentWindow.event.srcElement
  if(element.id = "span1")
  {
    msgbox,,, "Link" geklickt, 1
    ; WB.Navigate("http://ahkscript.org")
  }
  else if(element.id = "button1")
    msgbox,,, Button1 geklickt, 1
  else if(element.id = "button2")
    msgbox,,, Button2 geklickt, 1
}

GuiClose:
ExitApp
Und "cursor:pointer" versteht auch der IE 7.

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by SAPlayer » 05 Dec 2013, 14:13

Ich habs schon gelöst bekommen, ich hab einfach beim Start href="#" und mach dann, wenn es soweit ist, wb.document.getElementById("...").href = "...".
Das funktioniert auch einwandfrei und ich weiß auch nicht, wieso ich da nicht schon früher draufgekommen bin ^^
Das Problem ist, dass ich keine Garantie habe, dass IE 11 o.Ä. installiert ist und somit genutzt werden kann. Daher kann ich auch nicht einfach im CSS pointer-events nutzen.
Und einen "echten" Link brauche ich auch, damit ich einfach href angeben kann.

Aber so geht es ja nun.

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by Joe » 04 Dec 2013, 18:10

Du willst einen Klick auf einen Link abbrechen? Zum IE 7 fällt mir gerade nichts ein, IE 11 kann aber preventDefault():

Code: Select all

WB_OnClick(document)
{
  element := document.parentWindow.event.srcElement
  if(element.className = "inactive")
  {
    document.parentWindow.event.preventDefault()
  }
}
Man braucht aber gar keine Links. Will man die Optik eines Links, nimmt man ein Span mit dem CSS-Style "text-decoration: underline; cursor: pointer;". Das sieht dann aus wie ein Link, bleibt aber beim Draufklicken passiv und überlässt AHK die Kontrolle, AHK macht dann WB.Navigate() oder eben auch nicht.

Und wenn du bisher ein Flag auf 1 oder 0 gesetzt hast, kannst du das hier doch auch machen.

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by SAPlayer » 04 Dec 2013, 12:00

Ah, danke für den Hinweis, jetzt weiß ich, wieso mein CSS nicht übernommen wurde ^^
Ich habe die Funktion nämlich schon etwas länger abgeändert genutzt (jedoch in einer anderen Version, da bei mir die Daten - kurze Informationen - in einer Art ini stehen und nur mit einem festgelegten Design angezeigt werden sollen), doch jetzt will ich eben mehr mit ActiveX anfangen.

Übrigens, die Idee mit about:blank hab ich nicht selber gehabt, das wird so auch im AHK-Installer genutzt.

Und deine Methode mit WB_OnClick ist wahrscheinlich noch komplizierter als meine bisherige (einfach eine Variable auf 1 oder 0 setzen) - da lass ich lieber erstmal meine. Vor allem weiß ich nicht, ob es mit deiner Lösung überhaupt möglich ist, die eigentliche Aktion zu stoppen - genau das ist ja der Sinn von meinem deaktivierten Button. Falls du sowas noch findest, denk ich sogar darüber nach, deine Lösung zu nutzen ;)

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by Joe » 04 Dec 2013, 05:42

Habe nun mal gesucht, und es geht tatsächlich mit Shell.Explorer und write().
Hier ein Beispiel mit ComObjConnect, bei dem man auf die Elemente klicken kann, um deren Eigenschaften auszugeben:

Code: Select all

html =
(
<span class="active">span1</span><br>
<span class="inactive">span2</span><br>
<div id="d1">div1</div>
<div id="d2">div2</div>
)
Gui, Add, ActiveX, x0 y0 w400 h300 vWB, Shell.Explorer
WB.Navigate("about:tabs")
WB.document.write(html)
Gui, Show, w400 h300
ComObjConnect(x := WB.document, "WB_")
return

WB_OnClick(document)
{
  element := document.parentWindow.event.srcElement
  msgbox % "Element: " element.tagName
       . "`nClass: " element.className
       . "`nID: " element.id
       . "`nInhalt: " element.innerHTML
}

GuiClose:
ExitApp

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by Joe » 03 Dec 2013, 19:11

SAPlayer wrote:Auch das direkte Schreiben von HTML geht mit Shell.Explorer. Ich hab mir dazu eine Funktion gemacht:
Gute Idee, doch mit der Expression fügst du am Ende jeder Zeile ein HTML-Element <br> ein, z.B. auch in CSS- oder Script-Bereichen, die dann nicht mehr funktionieren. Außerdem wird ein Zeilenumbruch im Quelltext nicht als Zeilenumbruch, sondern als Leerzeichen interpretiert (nicht immer, im Element <pre> bleibt es ein Zeilenumbruch). Wenn, dann würde ich Zeilenumbrüche als Leerzeichen ersetzen und auf <pre> verzichten.

Die Idee mit about:blank ist aber nicht schlecht, vielleicht kommt man mit dem Ansatz noch weiter.
SAPlayer wrote:Ist es möglich, herauszufinden, auf welchen Button gedrückt wurde? Ich möchte nämlich herausfinden, ob der Button (es ist kein normaler Button, sondern a.button, also <a class="button">) die Klasse "disabled" hat.
Wenn du wie oben ComObjConnect(..., "wb_") registriert hast, könnte es so gehen (ungetestet):

Code: Select all

wb_OnClick(document)
{
  element := document.parentWindow.event.srcElement
  msgbox % element.className
}

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by SAPlayer » 03 Dec 2013, 16:14

Nächstes Problem, vielleicht weißt du (oder auch sonst jemand) ja weiter:
Ist es möglich, herauszufinden, auf welchen Button gedrückt wurde? Ich möchte nämlich herausfinden, ob der Button (es ist kein normaler Button, sondern a.button, also <a class="button">) die Klasse "disabled" hat.

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by SAPlayer » 03 Dec 2013, 11:17

Auch das direkte Schreiben von HTML geht mit Shell.Explorer. Ich hab mir dazu eine Funktion gemacht:

Code: Select all

SetWB(wb, html){
	wb.Navigate("about:blank")
	html := RegExReplace(html, "`a)`n", "<br>")
	while(wb.ReadyState != 4){
		if(A_Index > 30){
			ToolTip("Ein Fehler ist aufgetreten", 1000)
			return -1
		}
		Sleep 10
	}
	wb.Document.open()
	wb.Document.write(html)
	wb.Document.Close()
}

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by Joe » 03 Dec 2013, 06:04

SAPlayer wrote:Hast du es schonmal mit Shell.Explorer probiert?
Dein oben geposteter Code läuft hier ohne Fehlermeldung durch. Der Seiteninhalt wird bei mir aber meistens von AHK erzeugt, deshalb fände ich es schöner, wenn ich bei HTMLFile bleiben könnte und alles in einer Datei hätte. (Es ginge natürlich, eine temporäre Datei auf die Platte zu schreiben und anschließend mit Shell.Explorer wieder einzulesen).

Vielleicht ist der IE 11 aber auch nur zu restriktiv konfiguriert, dass er unterschiedliche Sicherheitszonen zugrundelegt oder im einen Fall ein Objekt gesperrt ist. Die Sicherheitseinstellungen des IE in Bezug auf ActiveX habe ich noch nie verstanden.

Ich werde das mal weiter untersuchen, wenn ich Zeit habe. Falls ich noch was finde, schreibe ich das hier rein.

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by SAPlayer » 02 Dec 2013, 15:32

Ich meinte eigentlich, falls du auch noch weitere Entdeckungen machst ;)

Hast du es schonmal mit Shell.Explorer probiert?
Ich muss dazu sagen, ich nutze auch nicht direkt Shell.Explorer, sondern einfach direkt den Pfad zu meiner HTML Datei (z.B. C:\test.html).

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by Joe » 02 Dec 2013, 15:28

SAPlayer wrote:Du kannst mir gerne über deine Entdeckungen berichten ;)
He, ich meinte die Entdeckung des Reg-Schlüssels ;)
SAPlayer wrote:Also bei mir funktioniert das mit dem ComObjConnect, ich nutze diesen Code:
Dann müsste es ja grundsätzlich gehen. Ich habe aber nicht Shell.Explorer, sondern HTMLFile:

Code: Select all

html =
(
<script type="text/javascript">
document.write(navigator.userAgent);
</script>
)
Gui Add, ActiveX, w600 h300 vIE, HTMLFile
IE.write(html)
ComObjConnect(IE, "IE_")    ; IE 11: Schnittstelle nicht unterstützt
Gui, Show, w600 h300
Return

GuiClose:
ExitApp

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by SAPlayer » 02 Dec 2013, 13:34

Du kannst mir gerne über deine Entdeckungen berichten ;)
Also bei mir funktioniert das mit dem ComObjConnect, ich nutze diesen Code:

Code: Select all

wb_BeforeNavigate2(wb, url, flags, frame, postdata, headers, cancel){ ;AHK-Installer //Lexikos
	;...
}
wb_NavigateError(wb, url, frame, status, cancel){ ;AHK-Installer //Lexikos
    wb_BeforeNavigate2(wb, url, 0, frame, "", "", cancel)
}

Gui, Add, ActiveX, x0 y0 w424 h300 v_MainGUI, Shell.Explorer
_mainGUI.Silent := 1
ComObjConnect(_mainGUI, "wb_")

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Post by Joe » 02 Dec 2013, 13:25

Wow, das ist ja mal 'ne Nachricht! Die mangelnden JS-Fähigkeiten haben mich schon viel Zeit gekostet, mit einem aktuellen IE wäre vieles einfacher. Bei mir funktioniert das ebenfalls, allerdings sehe ich gerade, dass dann ComObjConnect nicht mehr geht, was ja benötigt wird, um Events der Seite in AHK zu registrieren. Sehr schade.

Vielleicht kann man den Reg-Schlüssel ja auch dynamisch setzen. Das muss man alles mal austesten, aber eine interessante Entdeckung ist es auf jeden Fall.

Top