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