6

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.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>

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.

Pouria P
  • 565
  • 1
  • 8
  • 21
  • Easiest solution is to put the code in an external js file and have the bookmarklet add the file to the page. – epascarello Jan 10 '13 at 14:19
  • Do you actually have line breaks in the html code or is it just in here for pretty factor? – epascarello Jan 10 '13 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 comments and newlines. – MrWhite Jan 10 '13 at 14:28

3 Answers3

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 // comments. This is because a URI is not expected to have any line breaks and therefore the comment would never end when put onto one line.

Community
  • 1
  • 1
Paul S.
  • 64,864
  • 9
  • 122
  • 138
3

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

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

It needs to look like

<a href="javascript:document.body.style.color='red';alert('no line breaks');void(0);">foo</a>
epascarello
  • 204,599
  • 20
  • 195
  • 236
  • Good advice to add, but this doesn't answer anything about the quotes problem, which is what the question is asking (and the title clearly states). – jbyrd Mar 27 '19 at 14:48
  • Haha - yes, indeed - that's like a lifetime in front-end years :) – jbyrd Mar 29 '19 at 14:19
0

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

sbmaxx
  • 856
  • 5
  • 6