2014-07-04 53 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

相关问题