我有一个JavaScript书签,在Chrome(v21)和Safari(v6)中运行良好但是当我尝试在Firefox(v14)或IE(v9)中使用它时,我得到的页面只是说:
[object HTMLScriptElement]
bookmarklet就是这个(最后的所有PHP语句都插入了API密钥):
javascript: (function(src, cb) {
var s = document.createElement('script');
s.charset = 'UTF-8';
document.body.insertBefore(s, document.body.firstChild);
s.src = src;
if (typeof cb === 'function') {
s.onload = cb;
s.onreadystatechange = function() {
(/loaded|complete/).test(s.readyState) && cb(s);
};
}
return s;
}('http://towatchlist.com/marks/bookmarklet2response?uid=<?php echo $userID; ?>'))
我认为它根本不加载书签。在Firefox中,URL栏变为上面的代码;在IE中它甚至不会改变它所在的任何页面。
我确实尝试将自由执行的函数表达式中的bookmarklet包装为suggested elsewhere,但这只是导致了
Chrome控制台中的Uncaught SyntaxError: Unexpected token (
(没有别的)。这是我如何包装它:
javascript: (function() {
function(src, cb) {
var s = document.createElement('script');
s.charset = 'UTF-8';
document.body.insertBefore(s, document.body.firstChild);
s.src = src;
if (typeof cb === 'function') {
s.onload = cb;
s.onreadystatechange = function() {
(/loaded|complete/).test(s.readyState) && cb(s);
};
}
return s;
}('http://towatchlist.com/marks/bookmarklet2response?uid=<?php echo $userID; ?>')
}());
也许我没有将它包裹得恰到好处?在任何情况下,为了使IE / Firefox实际执行书签,我需要更改什么?
答案 0 :(得分:1)
小书签不得返回任何内容。只需删除return s;
行即可。
更一般地说,您可以在void()
函数调用中包装整个事物(或更准确地说是最后一个语句),以确保没有返回值。