2014-07-04 89 views
1

我正在開發Chrome擴展,我想啓用文本選擇。當我在chrome控制檯中執行此代碼時,我能夠啓用文本。啓用文本選擇javascript

document.onselectstart=new Function ("return true"); 

當我把代碼放在文檔就緒事件上時,什麼也沒有發生。

$(document).ready(function(e){ 
    document.onselectstart=new Function ("return true"); 
}); 

我應該在哪裏放這段代碼才能使它工作?

+0

我假設你正在嘗試阻止文本選擇的網站?如果是這樣,我會先看看他們做什麼,並繞過它。也許他們的onselectstart鉤子是在你之後應用的? – Johan

+0

是的,這可能是,有沒有辦法我可以申請我的鉤後鉤? – Kamal

+0

這總是很困難,但首先找到他們掛鉤的地方,看看有沒有明顯的方法可以執行。例如,你可以掛鉤他們的功能,只記得存儲原始功能並調用它。在絕對最壞的情況下,掛一個你知道的事件會在他們之後被執行或者使用定時/延遲執行(超時) – Johan

回答

0

我終於弄明白,則不會觸發事件(我不知道爲什麼)

通過添加腳本動態它的工作

var script = document.createElement('script'); 
script.type='text/javascript'; 
script.innerHTML = "document.onselectstart = function(){return true;};"; 
var body = document.getElementsByTagName('body')[0]; 
body.appendChild(script); 
3

我假設你的問題是隱含使用eval:你正在從一個字符串中創建一個函數。

does not work with the default Content Security Policy用於擴展,但在控制檯中工作,因爲這些限制不適用。

雖然你可以用unsafe-eval覆蓋CSP,請嘗試使用匿名函數來代替:

$(document).ready(function(e){ 
    document.onselectstart = function(){return true;}; 
}); 
+0

有趣的信息,但不幸的是,它沒有工作:(我編輯的代碼,並把它放在很多地方,沒有什麼我將代碼放在內容腳本文件中 – Kamal

+0

看來事件並沒有被觸發,我嘗試了 'document.onselectstart = function(){console.log('triggered!'); return true;}; 當我嘗試選擇時,控制檯上沒有顯示任何內容,而在控制檯中執行此代碼時,我可以顯示在控制檯「觸發!」 – Kamal

相關問題