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 に答える