我有一個書籤,我嘗試從遠程服務器加載腳本,然後在腳本加載後執行一些代碼。一個精簡例子在下面可以看到: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未安裝
我認爲這是一個安全「功能」...嘗試在Firefox地址欄中粘貼'javascript:'。你不能,你必須自己輸入那個部分 –
如果它是CSP,它將顯示在Web控制檯中。除此之外,我想這取決於網站,因爲它適用於我(Mac上的FF 39),而不是專門使用CSP的網站。 – robertklep
@robertklep有趣的是,它根本不適用於我在Mac上使用Fx 39 - 嘗試從我自己的網站(http://www.akawebdesign.com/)嘗試,並且沒有提出任何請求。沒有顯示在控制檯中。 – arthurakay