включить выделение текста javascript

#javascript #google-chrome-extension

#javascript #google-chrome-расширение

Вопрос:

Я разрабатываю расширение Chrome, я хочу включить выделение текста. Когда я выполняю этот код в консоли Chrome, я смог включить текст.

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

когда я помещаю код в событие document ready, ничего не происходит.

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

Куда мне поместить эту строку кода, чтобы она заработала?

Комментарии:

1. Я предполагаю, что вы пытаетесь использовать веб-сайт, который блокирует выделение текста? Если это так, я бы начал с просмотра того, что они делают, и обошел это. Возможно, их хук onselectstart применяется после вашего?

2. да, это может быть, есть ли способ, которым я могу применить свой хук после их хука?

3. Это всегда сложно, но прежде всего найдите, где они это подключают, и посмотрите, есть ли какой-либо очевидный способ выполнить после этого. Например, вы могли бы подключить их функцию, просто не забудьте сохранить исходную функцию и вызвать ее. В самом худшем случае перехватите событие, которое, как вы знаете, будет выполнено после их, или используйте timed / отложенное выполнение (тайм-аут)

4. Я пробовал что-то подобное, setTimeout(function(){ document.onselectstart=new Function ("return true"); alert('code executed !'); }, 5000); это не сработало

Ответ №1:

Я предполагаю, что ваша проблема заключается в неявном использовании eval : вы создаете функцию из строки.

Это не работает с Политикой безопасности содержимого по умолчанию для расширений, но работает в консоли, поскольку эти ограничения не применяются.

Хотя вы можете переопределить CSP с помощью unsafe-eval , попробуйте вместо этого использовать анонимные функции:

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

Комментарии:

1. Интересная информация, но, к сожалению, это не сработало : ( Я отредактировал код и разместил его во многих местах, и ничего не происходит. Я поместил код в файл сценария содержимого.

2. Кажется, событие вообще не запускается, я пробовал document.onselectstart = function(){console.log('triggered!');return true;}; Ничего не отображается на консоли, когда я пытаюсь выбрать, пока я выполняю этот код в консоли, я могу показать в консоли «сработало!»

Ответ №2:

Наконец я понял это, событие не запускается (я не знаю почему)

При добавлении скрипта динамически он работает

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