2015-08-03 79 views
0

我有一个书签,我尝试从远程服务器加载脚本,然后在脚本加载后执行一些代码。一个精简例子在下面可以看到:Bookmarklet适用于除Firefox以外的所有浏览器

(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); 
})(); 

(精缩为书签)

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)() 

添加这个书签,以铬,Safari和IE的代码按预期工作 - “数据foobar的“属性被添加到文档头部,脚本加载(以及我的事件侦听器触发)。

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

我不认为这是同样的bug为Bug 866522 - Bookmarklets affected by CSP因为这些网站我想这对不使用CSP。

任何想法?


规格:OSX 10.10.2,Firefox 39.标准设置,除外: *我阻止弹出窗口, *拒收轨道, *从不记住历史, *警告我,当站点尝试安装附加组件 *块报攻击网站 *块报网站伪造 *未设置为我的默认浏览器 * Flash未安装

+0

我认为这是一个安全“功能”...尝试在Firefox地址栏中粘贴'javascript:'。你不能,你必须自己输入那个部分 –

+1

如果它是CSP,它将显示在Web控制台中。除此之外,我想这取决于网站,因为它适用于我(Mac上的FF 39),而不是专门使用CSP的网站。 – robertklep

+0

@robertklep有趣的是,它根本不适用于我在Mac上使用Fx 39 - 尝试从我自己的网站(http://www.akawebdesign.com/)尝试,并且没有提出任何请求。没有显示在控制台中。 – arthurakay

回答

0

事实证明,选中“在书签栏中加载此书签”复选框似乎是问题所在。我不知道那是怎么发生的。

相关问题