Avatar billede kviller Novice
22. august 2009 - 17:28 Der er 28 kommentarer og
1 løsning

Få aktuelt link i iframe som en variable?

Hej eksperter.

Jeg har en side med en iframe hvor jeg så har nogen andre ting i. Så er det meningen at brugeren skal kunne surfe rundt på andre sider i min iframe, men så over min iframe har jeg nogen knapper og når man så trykker på dem har jeg brug for at få den aktuelle URL på iframe med over i en variable.

For eks:

<a href="New.php?iframe=$URL>Link</a>

<iframe src ="html_intro.asp" width="100%" height="300">

</iframe>

Så når jeg trykker på linket, skal jeg have den aktuelle URL på iframe med over i den nye side. (new.php)
Avatar billede Slettet bruger
22. august 2009 - 17:34 #1
Det kunne f.eks. gøres sådan her:

<script type="text/javascript">
gotoIframeUrl() {
var url, iframeUrl;
iframeUrl = getElementById('iframet').src;
url = "New.php?" + iframeUrl;
window.location = url;
</script>

<a href="java script:gotoIframeUrl();">Link</a>

<iframe id="iframet" src="html_intro.asp" width="100%" height="300"></iframe>
Avatar billede Slettet bruger
22. august 2009 - 17:35 #2
Hov, glemte en } til sidst i script tagget.


<script type="text/javascript">
gotoIframeUrl() {
var url, iframeUrl;
iframeUrl = getElementById('iframet').src;
url = "New.php?" + iframeUrl;
window.location = url;
}
</script>

<a href="java script:gotoIframeUrl();">Link</a>

<iframe id="iframet" src="html_intro.asp" width="100%" height="300"></iframe>
Avatar billede kviller Novice
22. august 2009 - 17:48 #3
Hej igen - mange tak for det, men det virker desværre ikke, selvom jeg er sikker på du er på rette vej, jeg kan desværre ikke selv finde fejlen, men når jeg trykker på linket, så går den ikke til new.php men prøver at gå til: java%20script:gotoIframeUrl();
Avatar billede mbm2016 Nybegynder
22. august 2009 - 18:27 #4
Det er fordi der ikke skal være mellemrum mellem "java" og "script".

Det skal se således ud i dit javascript kald: java script:gotoIframeUrl();
Avatar billede kviller Novice
22. august 2009 - 18:41 #5
Ja, det opdagede jeg også lige i mellemtiden, men det virker desværre ikke alligevel, den linker ikke til new.php, men skriver bare "fejl på siden" for neden i browseren.
Avatar billede ksoren Nybegynder
22. august 2009 - 18:50 #6
Der er vist glemt flere ting i den kode :)
Personligt vile jeg nok gøre noget i denne stil:

<a href="#" onclick="this.href='new.php?iframe='+document.getElementById('gg').src;return true;">Link</a>
Avatar billede kviller Novice
22. august 2009 - 18:59 #7
ksoren2 Det virker så fint, men hvis src af iframe har ændret sig er det stadig den originale src den henter. Planen er jo at få den aktuelle src over, så jeg kan bruge det link til noget som brugeren har surfet over på.
Avatar billede ksoren Nybegynder
22. august 2009 - 20:12 #8
Det er rigtigt. Vi er nok ude i noget omkring sikkerhed nu. Hvis du kan tappe den adresse de kigger på, kan du udnytte det på en ond måde.
Avatar billede kviller Novice
22. august 2009 - 21:33 #9
Jeg er jo kun ude på at få link på den aktuelle side der bliver vist i den iframe som er på min side og det er jo kun i tilfælde af at man trykker på "link" knappen at jeg får det over, men den feature kan ikke lade sig gøre eller hvad?
Avatar billede olebole Juniormester
23. august 2009 - 13:56 #10
<ole>

Det ser ud, som om der rodes lidt rundt i HTML-elementet iframe og window objektet, tilhørende den pågældende iframe.

For det første burde der ikke stå:
    iframeUrl = getElementById('iframet').src;

- men:
    iframeUrl = getElementById('iframet').getAttribute("src");

Skriver man sådan, henter man den URL, som stod skrevet i HTML-koden, da dokumentet ramte browseren. En attribut må i følge standarden ikke ændre sig på baggrund af brugerhandlinger. Desuden er det selve HTML-elementet og ikke window objektet, man hiver fat i.

Man kan hente iframe'ens window objekt på forskellig måde. Én af dem er at bruge name attributten på iframe'en:
    <iframe name="iframet" src="html_intro.asp" width="100%" height="300"></iframe>

- og så bruge:

<script type="text/javascript">
gotoIframeUrl() {
var url, iframeUrl;
iframeUrl = getElementsByName('iframet')[0].location.href;
// Brug variablen iframeUrl til noget
</script>

- men spørgsmålet er så bare: Hvad vil du bruge variablen til?

/mvh
</bole>
Avatar billede kviller Novice
24. august 2009 - 14:00 #11
Det jeg egentlig skal bruge det til er at jeg har en touch skærm siddene i køkkenet og når jeg så surfer på opskrifter vil jeg gerne med et enkelt klik kunne linke videre til en ny side hvor jeg kan parse ingredienserne ud og tilføre dem til min egen database som er en indkøbsseddel. Så jeg havde bare tænkt mig at have en iframe på cirka 90% i højden og så en knap over til at filføje tingene til min indkøbs database. Opskrift siden er ikke min, så derfor kan jeg ikke gøre det rent php mæssigt.

Jeg har fået lavet new.php så hvis $iframeurl="http://*ID=XXXXX" at den så henter alle indgredienser fra XXXXX og smider på min seddel. Så det er det jeg skal bruge det til.

Så alt i alt skal jeg bare have iframUrl med over i new.php siden og samtidig linke til den når jeg trykker på linket så noget i den retning som #1 skriver med:

url = "New.php?id=" + iframeUrl;
window.location = url;
Avatar billede olebole Juniormester
24. august 2009 - 14:20 #12
Så er svaret ganske enkelt: Det kan du ikke med JavaScript. Man kan ikke scripte mellem domæner - og det er en nødvendighed for at hente iframe'ens aktuelle URL
Avatar billede kviller Novice
24. august 2009 - 14:39 #13
Øv øv, så der er heller ikke en mulighed på en anden måde uden brug af iframe? Jeg har rodet lidt med brug af file_get_contents() men det bliver også noget rod... Må vel så bare lave en lille macro der indsætter "new.php?ID=" foran url adressen. Ville bare være meget lettere hvis man kunne gøre det ved kun at benytte browseren uden nogen form for anden software.

Mange tak for hjælpen
Avatar billede olebole Juniormester
24. august 2009 - 14:46 #14
Er det kun dig selv, der skal bruge systemet?
Avatar billede Slettet bruger
24. august 2009 - 15:09 #15
@olebole, ja, jeg burde have brugt .getAttribute("src"); i steder for bare .src, men min brug af window objektet var da helt fint. Meningen var jo at gå til en helt anden side, og ikke bare at sende iframet til en anden side.

--

Hvis du vil gøre det på en let clint-side måde, kan du prøve Firefox udvidelsen Greasemonkey ( https://addons.mozilla.org/da/firefox/addon/748 ). Udvidelsen fungerer ved, at den kan indstilles til at køre en stump javascript hver gang du kommer ind på en bestemt side (http://minyndlingskogebog.dk/opskrifter/*), og derved f.eks. indsætte et link til new.php?id=URL.
Avatar billede olebole Juniormester
24. august 2009 - 15:11 #16
Du kan skrive dette link i en HTML-fil:
    <a href="java script:document.body.innerHTML='<button onclick=\'window.open(\u0022http://www.domain.dk/side.php?url=\u0022+encodeURI(location.href),\u0022pop\u0022)\'>Gem</button>'+document.body.innerHTML;void(0)">Gem Opskrift</a>

- hvor du har skiftet URL'en ud til den fil på din server, som skal modtage URL'en til opskriften (skrevet med fed ovenfor).

Derefter kaster du HTML-dokumentet i en browser. Du højreklikker på linket 'Gem Opskrift' og vælger Føj til Foretrukne. Der kommer en advarselsboks, som du bare klikker Ja i. Scriptet er ikke farligt!

Når du står på en opskriftside, kan du vælge favoritten 'Gem Opskrift'. Det vil indskrive en knap i øverste, venstre hjørne af siden - med teksten 'Gem'.

Klikker du på knappen, åbnes en popup, der loader siden med fed i linkkoden foroven i denne kommentar. Med til siden sendes GET-variablen 'url', hvori opskriftsidens URL ligger.

En lidt lang historie, men prøv det  ;o)

Læs evt. min artikel om Bookmarklets:
    http://dengodekode.dk/bm_artikel.html
Avatar billede olebole Juniormester
24. august 2009 - 15:13 #17
kimsey0 >> Nej, du tager netop ikke fat i window objektet, men det HTML-element, der implementerer window objektet  ;o)
Avatar billede olebole Juniormester
24. august 2009 - 15:18 #18
kimsey0 >> Der er en verden til forskel på at kalde f.eks:
    <iframe id="ib" name="bo" src="fil.html"></iframe>

var o = document.getElementById("ib");
var o2 = frames.bo;

I o ligger en reference til HTML elementet.
I o2 ligger en reference til window objektet.

HTML elementets src attribut må ikke ændre sig, når siden i iframe'en skiftes.

Window objektets location.href skal ændre sig, når siden i iframe'en skiftes.
Avatar billede Slettet bruger
24. august 2009 - 20:33 #19
Ahh, nu forstår jeg hvad du mente. Du har helt ret. Troede bare at du mente at min brug af linjen
window.location = url;
var forkert :P
Avatar billede kviller Novice
24. august 2009 - 21:19 #20
Ole ja, det kunne være en god måde at få det løst på, ja det er kun min computer i køkkenet der skal benytte denne funktion. Jeg kan dog ikke lige få det til at virke. Der kommer ingen advarsel op og når jeg har tilføjet linket til bookmarks, så hopper den bare til den side når jeg står på opskriften og vælger "Gem opskrift" fra bookmarks. Jeg må vidst lige læse den artikel du har lavet for at forstå baggrunden. ;)
Avatar billede olebole Juniormester
24. august 2009 - 21:46 #21
Gå til denne side:
    http://dengodekode.dk/opskrifter/

Højreklik på linket og vælg Føj til Foretrukne. Klik Ja i advarselsboksen.

Klik på din favorit, mens du står på en side med en opskrift. Det indskriver en knap i øverste, venstre hjørne. Knappen åbner et vindue, i hvilket loades et dokument fra din server (Hvis du retter URL'en i et tilsvarende link og laver en ny favorit)
Avatar billede olebole Juniormester
24. august 2009 - 21:56 #22
Hehe ... og dén lille øvelse afslørede, hvad der går galt for dig  ;o)

Hvis du kopierer linket herfra tråden, får du et mellemrum med, som ikke skal være der. Eksperten tåler desværre ikke, man skriver javascript i et link. Den laver et mellemrum mellem java og script:
    <a href="java script:document. ....

Slet det mellemrum, så virker det  ;o)
Avatar billede kviller Novice
24. august 2009 - 21:59 #23
Ole smider du ikke lige et svar, jeg har fået det til at virke - TOTALT i orden. Jeg havde ikke tænkt på det på den måde... Det vidste jeg ikke man kunne.. Takker
Avatar billede olebole Juniormester
24. august 2009 - 22:23 #24
Det er egentlig nok også en lidt 'sneaky' løsning  ;o)
Avatar billede Slettet bruger
24. august 2009 - 23:41 #25
Pænt sneaky, men det virker :)
Længe leve bookmarklets!
Avatar billede olebole Juniormester
25. august 2009 - 00:01 #26
Ja, de kan bruges til meget fornuftigt. Dette er en lille udvidelse, hvor der åbnes en 100x100 px 'popunder' - en popup, som forsvinder under browseren. Samtidig fjernes knappen efterfølgende:

<a href="java script:document.body.innerHTML='<button onclick=\'var w=window.open(\u0022http://www.domain.dk/side.php?url=\u0022+encodeURI(location.href),\u0022pop\u0022,\u0022width=100,height=100\u0022);w.blur();this.parentNode.removeChild(this)\'>Gem</button>'+document.body.innerHTML;void(0)">Gem Opskrift</a>

- og så bør man naturligvis i PHP-filen skrive:


<?php
    // Indsæt i DB her
?>
<script type="text/javascript">
    window.close();
</script>



- så popup'en lukker, når der er fyldt i DB'en
Avatar billede olebole Juniormester
25. august 2009 - 00:16 #27
Til de, der kan lide at lege med bookmarklets er her en quick'n'dirty bookmarlet editor. Kald f.eks. filen BookMarkletEdit.hta.

Du skriver en eller anden kode i feltet, som du plejer at skrive - på flere linjer og med indrykning. Du skal dog huske at afslutte linjer med semikolon!

Når du vil teste din bookmarklet, trykker du Create. Så kopieres indholdet til variabel og foldes sammen på én linje, samtidig med, der sættes java script: før og ;void(0) efter. Til sidst kopieres det hele til clipboard'et.

Det er en helt simpel editor, men du kan dog bruge Tab og Shift+Tab på enkelt linjer og blokke af tekst.

Koden:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<HTA:APPLICATION ID="BookMarkletEditor" APPLICATIONNAME="BookMarkletEdit" VERSION="BookMarkletEditor 1.0.0"
    CAPTION="yes" BORDER="thin" INNERBORDER="yes" SHOWINTASKBAR="yes" SINGLEINSTANCE="yes"
    SYSMENU="yes" NAVIGABLE="no" WINDOWSTATE="normal">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>BookMarklet</title>
<style type="text/css">
html, body {
    height: 100%;
    margin: 0;
    padding: 0;
    font: 11px tahoma, sans-serif;
    background: buttonface;
    overflow: auto;
}
p, h3 {
    text-align: center;
}
h3 {
    margin-top: 12px;
}
input {
    width: 45px;
    font: 11px tahoma, sans-serif;
}
button {
    width: 85px;
}
input, button {
    vertical-align: middle;
}
textarea {
    font: 12px 'courier new';
    width: 90%;
    height: 350px;
    margin: 0 auto;
    display: block;
    overflow: auto;
}
</style>
<script type="text/javascript">
String.prototype.trim=function(){return this.replace(/(^\s+)|\s+$/g,"")};
var sTab = "    ";
var sBreak = "\r\n";

var sWhiteSpace = "";
function checkKeyUp(oTxt, oEvnt) {
    var bKillEvnt = false;
    if (oEvnt.keyCode==13 || oEvnt.keyCode==9) {
        var oRng = document.selection.createRange(),
        oRng2 = oRng.duplicate();
        oRng2.moveToElementText(oTxt);
        if (oEvnt.keyCode==13) {
            while (oRng.compareEndPoints("StartToStart", oRng2)>-1 && oRng.text.indexOf(sBreak)<0) {
                oRng.moveStart("character", -1);
            }
            if (oRng.text.indexOf(sBreak)>-1) oRng.moveStart("character", sBreak.length-1);
            (/^([ ]*)/).test(oRng.text);
            sWhiteSpace = RegExp.$1;
            oRng.collapse(false);
            oRng.text += sBreak + sWhiteSpace;
            oRng.select();
            bKillEvnt = true;
        }
        else if (oEvnt.keyCode==9) {
            oRng2.setEndPoint("endToStart", oRng);
            if (oEvnt.shiftKey) {
                var bDoSelect = oRng.text.length>0;
                while (oRng.compareEndPoints("StartToStart", oRng2)>0 && oRng.text.substr(0, sBreak.length)!=sBreak) {
                    oRng.moveStart("character", -1);
                }
                if (oRng.text.substr(0, sBreak.length)==sBreak) oRng.moveStart("character", sBreak.length-1);
                if (oRng.text.length>0) {
                    var oRX = new RegExp("(^|"+sBreak+")[ ]{0,4}", "g");
                    oRng.text = oRng.text.replace(oRX, "$1");
                    oRng.setEndPoint("startToEnd", oRng2);
                } else {
                    var oRX = new RegExp("(^|"+sBreak+")[ ]{0,4}", "g");
                    oRng.text = oRng.text.replace(oRX, "$1");
                }
                if (bDoSelect) oRng.select();
            } else {
                if (oRng.text.length>0) {
                    var oRX = new RegExp("(^|"+sBreak+")", "g");
                    oRng.text = oRng.text.replace(oRX, "$1"+sTab);
                    oRng.setEndPoint("startToEnd", oRng2);
                    oRng.select();
                }
                else oRng.text = sTab;
            }
            bKillEvnt = true;
        }
    }
    if (bKillEvnt) {
        oEvnt.cancelBubble = true;
        oEvnt.returnValue = false;
    }
}
function cleanTabs() {
    clipboardData.setData("Text", clipboardData.getData("Text").replace(/\t/g, sTab));
}

function createBookMarklet() {
    document.getElementById("bml").firstChild.nodeValue = "0";
    var sCode = document.getElementById("code").value.trim();
    if (/^\s*$/.test(sCode)) return;
    sCode = sCode.replace(/[ ]+/g, " ");
    sCode = sCode.replace(/\}\r\n/g, "};");
    sCode = sCode.replace(/\r\n|\r|\n|\t/g, "");
    sCode = sCode.replace(/ ?(=|\(|\)|\{|\}|\[|\]|\+|\-|\*|\?|,|;|<|>|&|\|) ?/g, "$1");
    sCode = sCode.replace(/;\}/g, "}");
    sCode = "java script:"+sCode+";void(0)";
    sCode = sCode.replace(/;;/g, ";");
    if (window.clipboardData) window.clipboardData.setData("Text", sCode);
    document.getElementById("bml").firstChild.nodeValue = sCode.length;
}
window.onload = function() {
    document.getElementById("code").focus();
}
</script>
</head>
<body>
<h3>Create BookMarklet</h3>
<p style="text-align:left"><textarea id="code" onkeydown="checkKeyUp(this, event)" onbeforepaste="cleanTabs()"></textarea></p>
<p><button onclick="createBookMarklet()">Create</button></p>
<p>Number of characters: <span id="bml">0</span></p>

</body>
</html>
Avatar billede olebole Juniormester
25. august 2009 - 00:19 #28
NB: Pas på denne linje:
    sCode = "java script:"+sCode+";void(0)";

Her skal der trækkes sammen til javascript - efterfulgt af et kolon  ;o)
Avatar billede olebole Juniormester
25. august 2009 - 15:22 #29
Tak for points  ;o)
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