Avatar billede Lasse Novice
06. februar 2002 - 23:22 Der er 11 kommentarer og
2 løsninger

vc++ og activeX component Microsoft Web Browser

Jeg har i et dialog baseret MFC project inkluderet en ActiveX control - Microsoft Web Browser. Naar man trykker paa et hyperlink kommer der en onclick event. Denne event kan man associere til en javascript funktion. Jeg kunne forestille mig at eventet bobler op, og paa et tidspunkt maa den kunne fanges udenfor selve browservinduet - altsaa i VC++ applikationen.

Er det muligt at gribe events fra en ActiveX Web Browser komponent udenfor selve komponenten?

Og, er det muligt at laese en vaerdi fra en javascript variable/ et input felt ... stadig UDENFOR selve web browser komponenten i min vc++ applikation?
Avatar billede jpk Nybegynder
07. februar 2002 - 09:48 #1
Du skal bruge et lille trick...
Jeg har tidligere fundet en artikel om dette på MS website og implementeret det således:

I min HTML-kode indsætter jeg et <A>-tag hvor jeg vil fange et event.
href-attributten angiver hvad der skal ske, fx som her, åbnes en fil:

<A href='app:FILE=C:\folder\name.ext'>Click here</A>

Når href-argumentet starter med "app:", ved jeg at det er noget jeg bruger i min applikation.
Når der klikkes på et A-tag med en href-attribut, vil browserkontrollen forsøge at udføre det. I din parent (uden for komponenten) kan du så fange et eventet som OnBeforeNavigate2(...)
Her undersøger du om href'en starter med "app:" og hvis ja, håndterer du selv eventet og signalerer dette ved at sætte
*pbCancel=TRUE;
så kontrollen ikke også forsøger at håndtere det.

void CHTMLViewEx::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags, LPCTSTR lpszTargetFrameName, CByteArray& baPostedData, LPCTSTR lpszHeaders, BOOL* pbCancel)
{
    CString strId(lpszURL);
    if(strId.Left(4) == "app:")
    {
        // This is a message that we will handle here!
        *pbCancel=TRUE;

        TRACE("%s\n", strId);

        if(!strId.IsEmpty())
        {
                  // Do what you want...
        }
    }

    CHtmlView::OnBeforeNavigate2(lpszURL, nFlags,    lpszTargetFrameName, baPostedData, lpszHeaders, pbCancel);
}
Avatar billede Lasse Novice
07. februar 2002 - 16:27 #2
ok, jeg kan se ideen i det, men inde paa mics hjemmeside, er der beskrevet at man kan fange disse events. Jeg tror maaske at jeg ville kunne bruge dit forslag, men jeg staar i den situation, at jeg skal fange en event fra en viewpoint plugin - a la SVG pluginen fra Adobe hvis det siger dig noget. Her bliver der ikke trykket paa et link, og siden bliver slet ikke genloadet. Saa jeg vil i dette tilfaelde ikke kunne benytte mig af beforenavigate :-(
Avatar billede Lasse Novice
07. februar 2002 - 16:29 #3
jeg havde forestillet mig at fange eventen onclick eller sadanne noget. Jeg skal lige kigge lidt mere paa det.
Avatar billede jpk Nybegynder
07. februar 2002 - 16:33 #4
Okay, hvis du gider må du da gerne lige smide et link til siden, måske jeg kan bruge noget derfra...

Jeg tror nu stadig godt du kan bruge metoden. Det event du får i kontrollen kan du vel bare sende videre ved at kalde noget lign.:
OnWhatEverEvent()
{
  document.location = "app:..."; // kan ikke lige helt huske syntaksen
}
Avatar billede Lasse Novice
07. februar 2002 - 16:49 #5
her i denne artikkel staar en del af det beskrevet, men for en nybegynder er det lige lovlig HARDCORE.... he he

http://www.microsoft.com/mind/defaulttop.asp?page=/mind/0798/webbrowser.htm&nav=/mind/0798/inthisissuecolumns0798.htm
Avatar billede Lasse Novice
07. februar 2002 - 17:26 #6
ja, men problemetet er at jeg ikke maa genloade siden. Siden indeholder en masse 3D modeller(faktisk a la flash bare i 3D). Flash genloader heller ikke siden naar der trykkes paa et link.
Avatar billede Lasse Novice
07. februar 2002 - 17:55 #7
jeg har faktisk fundet noget som viser hvad det er jeg gerne vil ... det er i en fil... jeg ved ikke om du er interesseret i at faa det jpk. Det fanger onclick, onmouseover, onmouseout(indefra VC++ apps) og saadanne ting....
Avatar billede jpk Nybegynder
08. februar 2002 - 12:35 #8
jo tak...
Men du har ikke helt forstået metoden beskrevet ovenfor!
Siden genloades IKKE!
Når man sætter *pbCancel=TRUE; som beskrevet tidligere, signalerer man netop at man HAR håndteret eventen og der ikke skal gøres mere...
Avatar billede jpk Nybegynder
08. februar 2002 - 12:44 #9
Er du klar over at der findes en decideret Flash kontrol?
Avatar billede Lasse Novice
08. februar 2002 - 16:26 #10
ahhh... hmmm, ok, nej saa har jeg ikke lige forstaet hvad det er der skete.

Men det der bliver trykket paa er en 3d model. Dvs at jeg tror ikke at den kommer ned til OnBeforeNavigate.

Egentlig har det indtet med flash at goere
Avatar billede Lasse Novice
08. februar 2002 - 16:39 #11
jeg vil lige kigge paa det og derefter komme tilbage med point uddelingen
Avatar billede Lasse Novice
14. februar 2002 - 17:05 #12
nej, jeg har nu fundet nogle eksempler ude paa det store net, som passer bedre til min forespoergsel. alligevel giver jeg dig 50 point for svarene
Avatar billede jpk Nybegynder
14. februar 2002 - 17:11 #13
takker...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester