javascript - hur man hanterar citattecken i bokmärkes-skript


detta är ett skript jag hittade för att skriva jQuery-bookmarklets och jag har lagt till tre rader kod till det. problemet är att jQuery-kod har många citattecken (för selektorer) och eftersom jag måste lägga bookmarklets i en href="javascript:code" blir allt rörigt med href:ens dubbla citattecken. här är hur min kod ser ut, jag försökte att undkomma dubbla citattecken på många sätt, men inget fungerade. finns det ett sätt att hantera detta problem?

<a href="javascript:(function(){

// the minimum version of jQuery we want
var v = '1.3.2';

// check prior inclusion and version
if (window.jQuery === undefined || window.jQuery.fn.jquery < v) {
    var done = false;
    var script = document.createElement('script');
    script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/' + v + '/jquery.min.js';
    script.onload = script.onreadystatechange = function(){
        if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
            done = true;
            initMyBookmarklet();
        }
    };
    document.getElementsByTagName('head')[0].appendChild(script);
} else {
    initMyBookmarklet();
}

function initMyBookmarklet() {
    (window.myBookmarklet = function() {
        // your JavaScript code goes here!
        var loc=window.location;
        $('body').append('<form id=\'IDform\' action=\'http:/pourid.3eeweb.com/read.php\' method=\'post\' ><input name=\'url\' type=\'text\' value=\''+loc+'\' /></form>');
        $('#IDform').submit();
    })();
}

 })();">bookmarklet</a>

när jag klickar på bokmärkeslänken säger firebug: SyntaxError: missing } after function body
men om jag kör javascriptet ensam (utan att använda en html-länk) fungerar det bra.

Svar #1

Det finns ett par sätt att göra detta, ett är att HTML-escapa citattecknen; &quot; eller &#34; för ", &#39; för '.

Det andra sättet, mitt föredragna, är att ange bokmärkesletaren som en sträng i JavaScript och fästa den vid <a> vid laddningstid, vilket innebär att du inte har några HTML-relaterade problem med den och webbläsaren kan göra all kodning åt dig om du sparar den.

Som sbmaxx också påpekade kan det hända att du behöver ta bort //-kommentarerna. Detta beror på att en URI inte förväntas ha några radbrytningar och därför skulle kommentaren aldrig ta slut när den sätts på en rad.

Svar #2

Du kan inte ha //-kommentarer eller radbrytningar i attributet. Det måste vara en lång sträng.

Om du vill ha kommentarer måste det vara blockkommentarer /*foo*/

Det behöver se ut som

<a href="javascript:document.body.style.color='red';alert('no line breaks');void(0);">foo</a>