Toon posts:

[IE extension] Pop-up scherm stylen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo GoTters,

Ik weet niet precies of dit topic in PW of WG thuishoort; de kern is HTML/CSS/Javascript maar het gaat om het programmeren in de context van een applicatie (Internet Explorer), dus daarom zou het meer een programmeervraag kunnen zijn. Ik begin maar in WG en laat het verder aan de oneindige wijsheid van de modjes over :).

Intro

Om even te summariseren voor mensen die niet weten waar ik het over ga hebben: het is mogelijk om het contextmenu ("rechtsklikmenu") van Internet Explorer uit te breiden met eigen opties. Door hierop te klikken kun je Internet Explorer een custom script (ge-embed in een HTML pagina) uit laten voeren.

Voorbeeld:

Maak maar eens de volgende HTML pagina aan:
HTML:
1
2
3
<script>
  alert("Oy wereld");
</script>


En voeg de volgende registry entry toe:
code:
1
2
3
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\Test\
@="c:\pad\naar\pagina.html"
Contexts=(DWORD)1


Als je Explorer restart dan krijg je als je rechts-klikt een menuoptie erbij die het script lanceert (en dus een alert toont).

Allemaal nuttig, want je kan hier doen wat je wil, en je kan de pagina en het object waarvandaan het aangeroepen is opvragen etc. Tot zover, geen probleem.

Wat ik heb
Ik heb deze feature gebruikt om een script te schrijven dat alle <EMBED> objects in een webpagina laat zien. Dit omdat media player embedding in mijn IE niet meer goed werkt, en ik niet weet hoe ik het moet maken. Dus werken we eromheen ;). Ook lijkt dit script me nog best nuttig ook al zou embedding wel werken, want dan kun je een embedded bestand downloaden zonder in de source te hoeven duiken.

Het volgende script doet wat ik wil:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script>
var w = window.open("about:blank", "embedwindow", "scrollbars,resizable");
var embeds = external.menuArguments.document.getElementsByTagName("EMBED");

w.document.write("<base href='" + external.menuArguments.location + "'>");

w.document.write("<table>");

for (i = 0; i < embeds.length; i++) {
  var src = embeds[i].src;
    w.document.write("<tr><td><a href='" + src + "'>" + src + "</a></td></tr>");
}

w.document.write("</table>");

w.document.write("<br><br><a href='javascript:window.close();'>Close</a>");

</script>


Wat ik wil
Dit is allemaal mooi en aardig, behalve dan dat het niet mooi is. Het probleem is namelijk dat ik niet weet hoe ik deze uitvoer moet stylen (op een beetje een relaxte manier, that is). Waarom voeg ik niet gewoon <style> tags toe? Omdat het venster wat uiteindelijk verschijnt, niet deze pagina als source bevat. Het pop-up window wordt namelijk zonder locatie gemaakt en via scriptcode gevuld.

Ik heb wel geprobeerd een <style> sectie in dit document te zetten en die via DOM manipulatie te kopiëren naar het andere document, maar daarbij kreeg ik allemaal fouten; blijkbaar kon dit niet. Als laatste oplossing die waarschijnlijk wel zou werken zou ik een <style> sectie volledig kunnen w.document.write'en(), maar dat is zo lelijk dat ik er eigenlijk liever niet over na wil denken. Er moet toch een betere oplossing zijn...

Mijn vraag is dus: is er iemand die ervaring heeft met het op deze manier maken van uitbreidingen voor Internet Explorer, of heeft iemand een idee of ervaring met het stylen van volledig dynamisch gegenereerde pop-up vensters?

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:53
Een nieuw venstertje laten openen door je script en daarin de werkelijke content plaatsen? Vervolgens het huidige venster sluiten.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

iets als
JavaScript:
1
w.document.write('<link rel="stylesheet" href="link/naar/stylesheet.css">');

moet zeker weten werken. Vergeet niet na je document.write's een w.document.close() te doen...

[ Voor 37% gewijzigd door crisp op 13-09-2004 22:42 ]

Intentionally left blank


Verwijderd

Topicstarter
Bedankt voor jullie reacties (hoewel ik die van djluc niet helemaal snap), maar ik ben vergeten in mijn oorspronkelijke post te zeggen dat ik het eigenlijk wil doen zonder extra bestanden te gebruiken (voor zover mogelijk natuurlijk).

Maar bedankt voor de tip van het stylesheet includen; zo eenvoudig kan het natuurlijk ook zijn. Maar ik wil hier pas op terugvallen als oplossing in één bestand niet mogelijk blijken te zijn...

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 14 september 2004 @ 00:01:
Bedankt voor jullie reacties (hoewel ik die van djluc niet helemaal snap), maar ik ben vergeten in mijn oorspronkelijke post te zeggen dat ik het eigenlijk wil doen zonder extra bestanden te gebruiken (voor zover mogelijk natuurlijk).

Maar bedankt voor de tip van het stylesheet includen; zo eenvoudig kan het natuurlijk ook zijn. Maar ik wil hier pas op terugvallen als oplossing in één bestand niet mogelijk blijken te zijn...
Het is het 1 of het ander; of je styles inline document.write'n of een stylesheet includen. Als laatste optie kan je nog dingen doen als:
JavaScript:
1
w.document.getElementById('foo').style.backgroundColor = 'red';

maar dan moet je eerst zeker weten dat de inhoud van je window al geparsed is, en ik denk dat je dan sneller klaar ben met gewoon een inline stylesheet ;)

Intentionally left blank