Bookmarklet适用于除Firefox以外的所有浏览器

时间:2015-08-03 12:52:22

标签: javascript firefox bookmarklet

我有一个书签,我尝试从远程服务器加载脚本,然后在脚本加载后执行一些代码。下面是一个精简的例子:

(function () {
    var url = '//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js';

    var injectExtensionScript = function (path) {
        alert('injectExtensionScript');

        var element = document.createElement('script');
        element.type = 'text/javascript';
        element.src = path;

        document.addEventListener('load', function () {
            alert('loaded jquery');
        }, true);

        document.head.appendChild(element);
    };

    document.head.setAttribute('data-foobar', 123);

    injectExtensionScript(url);
})();

(缩小为bookmarklet)

javascript:(function()%7B(function%20()%20%7Bvar%20url%20%3D%20'%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fjquery%2F1.9.0%2Fjquery.min.js'%3Bvar%20injectExtensionScript%20%3D%20function%20(path)%20%7Balert('injectExtensionScript')%3Bvar%20element%20%3D%20document.createElement('script')%3Belement.type%20%3D%20'text%2Fjavascript'%3Belement.src%20%3D%20path%3Bdocument.addEventListener('load'%2C%20function%20()%20%7Balert('loaded%20jquery')%3B%7D%2C%20true)%3Bdocument.head.appendChild(element)%3B%7D%3Bdocument.head.setAttribute('data-foobar'%2C%20123)%3BinjectExtensionScript(url)%3B%7D)()%7D)()

将此书签添加到Chrome,Safari和IE,代码按预期工作 - " data-foobar"属性被添加到文档头,脚本加载(我的事件监听器触发)。

然而,Firefox完全是一个不同的故事。脚本似乎运行(没有错误,第一个alert()触发......但" data-foobar"属性添加到文档头,也没有是加载的脚本(网络选项卡从不记录请求,事件监听器永远不会触发)。

我不认为这是与Bug 866522 - Bookmarklets affected by CSP相同的错误,因为我尝试此操作的网站没有使用CSP。

有什么想法吗?

规格:OSX 10.10.2,Firefox 39.标准设置,但:   *我阻止弹出窗口,   * 不跟踪,   *永远不记得历史,   *当网站尝试安装附加组件时警告我   *阻止报告的攻击网站   *阻止报告的网络伪造   *未设置为我的默认浏览器   *未安装Flash

1 个答案:

答案 0 :(得分:0)

事实证明,选中“在侧边栏中加载此书签”复选框似乎是个问题。我不知道是怎么回事。