Avatar billede k.andersen Nybegynder
14. marts 2011 - 22:06 Der er 11 kommentarer og
1 løsning

style.border virker ikke i firefox

Hejsa-

Jeg har brug for et JavaScript bookmark, som finder en div med en specifik class og derefter ligger en border på denne div.

Jeg har fået det til at virke i Safari, men skal selvfølgelig bruge det i FireFox - det virker som om at object.style.border ikke virker i FireFox når jeg kører det fra et bookmark.

Dette er hvad jeg har fået til at virke i Safari:
java script:xx = document.getElementsByClassName("class_center").item(0);xx.style.border="5px dotted green";

Da det skal bruges som et bookmark skal det køres fra browserens adresse felt. Det kan testes her: http://www.chillin.dk/tnt

Hvad skal jeg gøre for at få det til at virke i FireFox?

På forhånd tak!

Mvh.
Kasper
Avatar billede k.andersen Nybegynder
14. marts 2011 - 22:17 #1
Kan se at eksperten.dk automatisk laver mellemrum i ordet javascript i eksemplet jeg har vedhæftet - så husk at fjern det :-)
Avatar billede majbom Novice
15. marts 2011 - 09:58 #2
border er hvis du skal skrive både style, width og color

du skal bruge borderWidth
Avatar billede phillips Nybegynder
15. marts 2011 - 10:13 #3
Jeg har en lille smule svært ved at forstå spørgsmålet. Men hvis det er et script, der skal køre via et bookmark (en såkaldt bookmarklet), mener jeg, at Firefox ikke kan håndtere flere statements med mindre det ligger i en function.

Jeg har ikke lige en Firefox i nærheden, men din bookmarklet kan måske se sådan ud:

(function(){document.getElementById("center").style.border="5px dotted green";});

Bemærk, at jeg har ændret dit script, da det kan gøres hurtigere og kortere:

document.getElementById("center").style.border="5px dotted green";
Avatar billede majbom Novice
15. marts 2011 - 10:28 #4
arh - jeg havde sq ikke set du havde "dotted green" med

bare glem min kommentar
Avatar billede olebole Juniormester
15. marts 2011 - 15:02 #5
<ole>

Den viste kode virker ikke i Safari - og det gør den heller ikke i FF, IE eller Opera. Koden returnerer ikke 'undefined', og så forsøger browseren jo at skifte side. Denne virker derimod:

java script:xx=document.getElementsByClassName("class_center").item(0);xx.style.border="5px dotted green";void(0)


- og den virker også skønt i FF. Til gengæld understøtter IE endnu ikke getElementsByClassName

/mvh
</bole>
Avatar billede olebole Juniormester
15. marts 2011 - 15:08 #6
- og så er det altid et must at forklare tydeligt, hvad der ikke virker.

Hvis jeg parkerer øsen foran Mads Mekaniker, går ind og smider nøglerne på disken og siger: "Der er noget galt med slæden. Jeg henter den igen kl. 16" - så har jeg indenfor få minutter en meget sur Mads i røret. Hvis ikke jeg har det, får jeg en meget sur bankrådgiver i røret, når regningen er betalt.

Fem timers fejlsøgning i motoren - og så var det elbagruden, der ikke virkede. Det kan være dyrt at spare på ord  ;o)
Avatar billede k.andersen Nybegynder
15. marts 2011 - 18:11 #7
Tak til jer allesammen. Jeg beklager hvis det ikke var forklaret godt nok. Det mente jeg selv, men beklager hvis det ikke var tilfældet.

Olebole du formåede dog alligevel at løse det trods min manglende forklaring (så helt galt var det vist heller ikke ;-), hvis du smider et svar, så får du pointene, da den kode du postede virker perfekt!

Tak for hjælpen!
Avatar billede olebole Juniormester
15. marts 2011 - 18:38 #8
Selvtak. 11 år på Eksperten giver ikke så lidt clairvoyant erfaring - og så er jeg en af de vistnok forholdsvis få, der har brugt og konstrueret bookmarklets i rå mængder  ;o)

Jeg samler ikke længere points, men tak for tilbudet  =)
Avatar billede olebole Juniormester
15. marts 2011 - 18:41 #9
Husk, at alert returnerer undefined. Derfor virker en test-bookmarklet, der ender med en alert altid. Fjerner man alert'en, må man i stedet afslutte strengen med at kalde fuktionen void med 0 som argument  =)
Avatar billede olebole Juniormester
15. marts 2011 - 19:14 #10
Jeg skrev forøvrigt denne bookmarklet editor for nogle år siden. Den er quick'n'dirty - og mange ting kunne være løst mere elegant - men den virker fint som et hurtigt værktøj  =)

Den giver mulighed for at skrive komplekse bookmarklets på en overskuelig måde uden at skulle folde linjer ind og ud hele tiden - eller sidde og skrive i én uoverskuelig lang linje.

Du skriver koden i editoren, som du vil skrive JS-kode i enhver anden editor. Du kan indrykke linjer 4 mellemrum med Tab - både enkeltlinjer og blokke af linjer. Og du kan rykke linjer 4 mellemrum ud igen med Shift+Tab - også både som enkeltlinjer og blokke.

Når du er færdig med din kode, klikker du på Create. Så foldes koden sammen på én linje - får sat 'java script:' foran og 'void(0)' efter - og bliver automatisk kopieret til din udklipsholder, så du kan sætte den direkte ind i en browsers adresselinje. Du får endvidere vist, hvormange tegn linjen i alt består af.

Koden ser sådan ud og skal gemmes som BookMarklet.hta:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<!-- ************************************************************************************************
                                        BookMarkletEditor 1.0.0
                                      (C) Copyrigt Ole Clausen 2009
************************************************************************************************* -->
<head>
<HTA:APPLICATION ID="BookMarkletEditor" APPLICATIONNAME="BookMarkletEdit" VERSION="BookMarkletEditor 1.0.0"
    CAPTION="yes" BORDER="medium" INNERBORDER="yes" SHOWINTASKBAR="yes" SINGLEINSTANCE="yes"
    SYSMENU="yes" NAVIGABLE="no" WINDOWSTATE="normal"></hta:application>
<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 = sCode.replace(/;catch/g, "catch");
    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;
}
function doSize() {
    var o = document.getElementById("code");
    o.style.height = (document.documentElement.clientHeight-(o.offsetTop+100)) + "px";
    o.style.width = (document.documentElement.clientWidth-40) + "px";
}
window.onload = function() {
    document.getElementById("code").focus();
    doSize();
}
window.onresize = doSize;
</script>
</head>
<body oncontextmenu="return false">
<h3>Create BookMarklet</h3>
<p style="text-align:left"><textarea id="code" onkeydown="checkKeyUp(this, event)" onbeforepaste="cleanTabs()" oncontextmenu="event.cancelBubble=true;return true"></textarea></p>
<p><button onclick="createBookMarklet()">Create</button></p>
<p>Number of characters: <span id="bml">0</span></p>

</body>
</html>



Enjoy  ;o)
Avatar billede k.andersen Nybegynder
16. marts 2011 - 21:34 #11
Tak for din yderligere forklaring det giver helt bestemt mening. Og ikke mindst for din ovenstående eksempel - super fedt :-)
Avatar billede olebole Juniormester
16. marts 2011 - 23:35 #12
Jamen, selvtak! Din tråd her har faktisk sat mig igang med et meget sjovt projekt - bygget på editoren ovenfor  =)

Den nye editor er ikke til bookmarklets, men kan bruges som fejlfindings værktøj og til at runtime undersøge dynamiske websider med.

Har jeg en webside åben i en browser, kopierer jeg URL'en fra adressebaren. Derefter klikker jeg på en knap i editoren. Editoren henter selv URL'en i min udklipsholder - og kan med et Shell object finde det pågældende browservindue og oprette en reference til browserens window object.

Referencen bliver lagt i variablen _ i editoren. Vil jeg tilgå et bestemt element i dokumentet i browseren, skriver jeg f.eks.:

var o = _.document.getElementById("myDiv");
o.style.color = "red";
_.alert(o.innerHTML);


Så bliver teksten i elementet myDiv i det fremmede dokument farvet rødt (hvis det nu skulle være sjovt?!), samtidig med at siden i browseren alert'er elementets indhold.

Måske ikke det bedste eksempel - men det er et enormt kraftfuldt værktøj til on-the-fly at undersøge variabler, objekter, elemeter, etc. i et dynamisk dokument  *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

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