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.
- 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
3 Answers
Reset to default 5There 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 //
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 ;)