0

我有一个在 Chrome (v21) 和 Safari (v6) 中运行良好的 JavaScript 小书签,但是当我尝试在 Firefox (v14) 或 IE (v9) 中使用它时,我得到一个页面,上面写着:

[对象 HTMLScriptElement]

小书签是这样的(最后的所有 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 中,它甚至不会从它所在的任何页面改变。

我确实尝试按照其他地方的建议将小书签包装在自执行函数表达式中,但这只会导致 Uncaught SyntaxError: Unexpected token (Chrome 控制台(仅此而已)。这是我包装它的方式:

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 实际执行书签,我需要更改什么?

4

1 回答 1

1

小书签不得返回任何内容。只需删除return s;线,你应该很好。

更一般地,您可以将整个内容(或更准确地说是最后一条语句)包装在void()函数调用中,以确保没有返回值。

于 2012-08-09T00:24:37.913 回答