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.
There are a couple ways of doing this, one is to HTML-escape the quotes; "
or "
for "
, '
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.
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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With