Avatar billede jmjveb Nybegynder
22. juni 2008 - 13:07 Der er 19 kommentarer og
1 løsning

javascript der åbner link i nyt vindue?

Kan man lave et javascript f.eks. link.js - som ved klik på et link åbner det i et nyt vindue
og indsætte <script src="../link.js" type="text/javascript"></script> i head på siden ?
Avatar billede w13 Novice
22. juni 2008 - 13:28 #1
Forstår ikke helt, hvorfor du vil have det i link.js-filen. Du kan åbne et nyt vindue således:

<script type="text/javascript">
var win=null;
function insertScript(){
  var newElement=win.document.createElement("script");
  newElement.setAttribute("src","../link.js");
  newElement.setAttribute("type","text/javascript");
  win.document.getElementsByTagName('head')[0].appendChild(newElement);
  newElement=null;
}
function openWinInsertScript(s){
  win=window.open(s,"win","");
  window.setTimeout("insertScript()",800);
}
</script>

<a href="linket.htm" onclick="openWinInsertScript(this.getAttribute('href'));return false">Link</a>
Avatar billede soerenlyn Nybegynder
22. juni 2008 - 13:31 #2
Det tror jeg ikke holder helt. Det kræver jo at popup-vinduet er åbnet efter 800 ms, hvilket ikke kan garanteres.
Avatar billede w13 Novice
22. juni 2008 - 13:32 #3
Så må setTimeout sættes op. Jeg mener ikke, det kan gøres crossbrowser onload. Optimalt set skal linket bare selv sørge for at sætte det ind.
Avatar billede w13 Novice
22. juni 2008 - 13:33 #4
Jeg tester lige, om jeg kan finde en anden løsning.
Avatar billede soerenlyn Nybegynder
22. juni 2008 - 13:35 #5
Det smarteste vil være at du skriver <script....</script> direkte ind i head på de sider der skal linkes til. Så skal der ikke være nogen magisk konstant der angiver ventetiden indtil at popup-vinduet _forhåbentligt_ er åbnet .. :P
Avatar billede kentora Nybegynder
22. juni 2008 - 13:39 #6
kan du ikke bare bruge htmlkoden <a href="sti" target="_blank">tekst</a>?? ville syntes at det var meget nemmere
Avatar billede w13 Novice
22. juni 2008 - 13:42 #7
Følgende tester om vinduet er åbent hvert 100. ms:

<script type="text/javascript">
var win=null;
function insertScript(){
  var newElement=win.document.createElement("script");
  newElement.setAttribute("src","../link.js");
  newElement.setAttribute("type","text/javascript");
  if(win.document.getElementsByTagName("head")[0]){
    win.document.getElementsByTagName("head")[0].appendChild(newElement);
  }else{
    window.setTimeout("insertScript()",100);
  }
  newElement=null;
}
function openWinInsertScript(s){
  win=window.open(s,"win","");
  insertScript();
}
</script>

<a href="linket.htm" onclick="openWinInsertScript(this.getAttribute('href'));return false">Link</a>
Avatar billede soerenlyn Nybegynder
22. juni 2008 - 13:42 #8
kentora --> Det vil jo ikke indsætte <script>..</script> i head ?
Avatar billede soerenlyn Nybegynder
22. juni 2008 - 13:44 #9
w13 --> Det er bedre, i og med det nu ikke kommer an på computerens hastighed om teksten bliver indsat, men det er lidt spild af ressourcer at tjekke igen og igen og [indsæt ad libitum] om vinduet nu er åbnet :P
Avatar billede w13 Novice
22. juni 2008 - 13:47 #10
kentora>> Ja, target ville kunne bruges til at åbne et nyt vindue, hvis man bruger HTML 4.01 transitional. Men under 4.01 strict eller fremtidigt under XHTML vil target ikke være en mulighed.
Avatar billede w13 Novice
22. juni 2008 - 13:51 #11
Jeg tror ikke, der rigtig er nogen bedre løsning.

Så vidt jeg husker (og det viser en hurtig test også), vil:
win.onload=function(){ //kommando };
ikke give noget resultat.
Avatar billede jmjveb Nybegynder
22. juni 2008 - 13:57 #12
siden er i xhtml 1.0 strict, hvorfor target _blank ikke kan bruges.

Det må være noget med en function i java script ?
Avatar billede w13 Novice
22. juni 2008 - 13:58 #13
Jep, så kan du bruge den kode, jeg gav dig. =)
Avatar billede w13 Novice
22. juni 2008 - 13:58 #14
Den er i øvrigt testet og virker fint!
Avatar billede w13 Novice
22. juni 2008 - 14:03 #15
Du kan nu godt spare den ene funktion væk, synes jeg:

<script type="text/javascript">
var win=null;
function insertScript(){
  var newElement=win.document.createElement("script");
  newElement.setAttribute("src","../link.js");
  newElement.setAttribute("type","text/javascript");
  if(win.document.getElementsByTagName("head")[0]){
    win.document.getElementsByTagName("head")[0].appendChild(newElement);
  }else{
    window.setTimeout("insertScript()",100);
  }
  newElement=null;
}
</script>

<a href="linket.htm" onclick="win=window.open(this.getAttribute('href'),'win','');insertScript();return false">Link</a>
Avatar billede jmjveb Nybegynder
22. juni 2008 - 14:11 #16
hvad skal der så stå i link.js?
Avatar billede w13 Novice
22. juni 2008 - 14:12 #17
Nåh! :D Ok, jamen så misforstod jeg dig. Min kode indsætter <script src="../link.js" type="text/javascript"></script> i det nye vindue!

Koden bliver meget mindre så! :)

Bare brug:

<a href="linket.htm" onclick="window.open(this.getAttribute('href'),'win','');return false">Link</a>

Så sparer du også link.js!

Glem alt om <script>-tag'et :)
Avatar billede w13 Novice
22. juni 2008 - 14:15 #18
Hvis du meget gerne vil have funktionen i en ekstern js-fil, så kan du bruge:

<a href="linket.htm" onclick="winOpen(this.getAttribute('href'));return false">Link</a>

Og så i din fil link.js kan du skrive:

function winOpen(s){
  window.open(s,"win","")
}
Avatar billede jmjveb Nybegynder
22. juni 2008 - 14:25 #19
jep - w3c validerer den som værende xhtml 1.0 strict - ok mange tak!
Avatar billede w13 Novice
22. juni 2008 - 14:37 #20
Og tak for point! :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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