2015-08-03 47 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

事實證明,選中「在書籤欄中加載此書籤」複選框似乎是問題所在。我不知道那是怎麼發生的。

相關問題