最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript - how to deal with quotes in bookmarklets - Stack Overflow

matteradmin7PV0评论

this is a script i found for writing jQuery bookmarklets and i've added three lines of code to it. the problem is jQuery code has lots of quotes (for selectors) and as i have to put the bookmarklets in a href="javascript:code" everything gets messed up with the href's double quotes. here is what my code looks like, i tried to escape double quotes, in many ways, but none did work. is there a way to deal with this 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 = '/' + v + '/jquery.min.js';
    script.onload = script.onreadystatechange = function(){
        if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'plete')) {
            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/read.php\' method=\'post\' ><input name=\'url\' type=\'text\' value=\''+loc+'\' /></form>');
        $('#IDform').submit();
    })();
}

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

when i click on the bookmarklet link, firebug says: SyntaxError: missing } after function body
but if i run the javascript only(not using an html link) it runs fine.

this is a script i found for writing jQuery bookmarklets and i've added three lines of code to it. the problem is jQuery code has lots of quotes (for selectors) and as i have to put the bookmarklets in a href="javascript:code" everything gets messed up with the href's double quotes. here is what my code looks like, i tried to escape double quotes, in many ways, but none did work. is there a way to deal with this 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./ajax/libs/jquery/' + v + '/jquery.min.js';
    script.onload = script.onreadystatechange = function(){
        if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'plete')) {
            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./read.php\' method=\'post\' ><input name=\'url\' type=\'text\' value=\''+loc+'\' /></form>');
        $('#IDform').submit();
    })();
}

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

when i click on the bookmarklet link, firebug says: SyntaxError: missing } after function body
but if i run the javascript only(not using an html link) it runs fine.

Share Improve this question edited Jan 10, 2013 at 16:12 Pouria P asked Jan 10, 2013 at 14:14 Pouria PPouria P 5951 gold badge8 silver badges24 bronze badges 3
  • Easiest solution is to put the code in an external js file and have the bookmarklet add the file to the page. – epascarello Commented Jan 10, 2013 at 14:19
  • Do you actually have line breaks in the html code or is it just in here for pretty factor? – epascarello Commented Jan 10, 2013 at 14:21
  • In your current script, you don't have a problem with quotes in the bookmarklet since you are not using double quotes (used to delimit the HTML attribute) in your code. However, the problem is your ments and newlines. – MrWhite Commented Jan 10, 2013 at 14:28
Add a ment  | 

3 Answers 3

Reset to default 5

There are a couple ways of doing this, one is to HTML-escape the quotes; &quot; or &#34; for ", &#39; for '.

The other way, my preferred, is to enter the bookmarklet as a string in JavaScript and attach it to the <a> at load time, meaning you don't have any HTML-related problems with it and the browser can do all the encoding for you if you save it.

Also as sbmaxx pointed out, you may need to remove the // ments. This is because a URI is not expected to have any line breaks and therefore the ment would never end when put onto one line.

You can not have // ments or line breaks in the attribute. It needs to be one long string.

If you want ments, it needs to be block ments /*foo*/

It needs to look like

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

Just delete ments // in your code and it should work ;)

Post a comment

comment list (0)

  1. No comments so far