2013-10-01 3 views
1

Некоторые веб-как отвязать document.ondblclick с хромированной расширением

<SCRIPT SRC="js/tt2.js"></SCRIPT> 

tt2.js

toggle=0; 
function dblclick() { 
    if (toggle==0) { 
     var sc=99999; toggle=1; 
    } else { 
     var sc=0; toggle=0; 
    } 
    window.scrollTo(0,sc); 
} 
if (document.layers) { 
    document.captureEvents(Event.ONDBLCLICK); 
} 
document.ondblclick=dblclick; 

"document.ondblclick = NULL;" не работает. Как я могу удалить (развязать) событие dblclick с расширением chrome?

+0

Как вы пробовали 'document.ondblclick = function() {}'. Кроме того, вы действительно должны использовать '.addEventListener', чтобы вы могли использовать соответствующий' .removeEventListener'. – Halcyon

+0

спасибо, что ответите. но этот код не работает. и сайт не мой. поэтому я не могу это изменить. – KKY

ответ

1

Причина:

Вы можете переопределить document.ondblclick. Проблема - это контекст. У вас есть хром-расширение контекста и контекст страницы.

possible context

Для тестирования вы можете добавить в расширении следующим образом:

document.ondblclick = function() { 
    alert("chrome extension ondblclick event"); 
} 

Вы можете взглянуть в обоих контекстах событие:

event callbacks on each context

Если вы запустите этот событие, вы увидите, что вызываются оба события.

Решение:

Что вам нужно переопределить ondblclick в странице контекста. Действительно простой способ сделать это - добавить свой собственный скрипт в страницу - тогда он будет работать в контексте страницы.

Чтобы внедрить скрипт, который вы можете написать inject.js:

(function(){ 
    var scriptElement = document.createElement('script'); 
    scriptElement.setAttribute('type', 'text/javascript'); 
    scriptElement.setAttribute('src', chrome.runtime.getURL('js/ownOndblclick.js')); 

    document.getElementsByTagName('head')[0].appendChild(scriptElement); 
}()); 

И вам нужен сценарий, который вы должны вводить. В данном случае это ownOndblclick.js:

document.ondblclick = function() { 
    alert("free"); 
} 

оповещения только для тестирования. Удалите его после того, как увидите, что он работает, как ожидалось. Последний шаг заключается в корректировке manifest.json:

{ 
    ... 

    "permissions": [ 
     "http://whereever/*" 
    ], 

    "content_scripts": [ 
     { 
      "matches": ["http://whereever/*"], 
      "js": ["js/inject.js"] 
     } 
    ], 

    "web_accessible_resources" : [ 
     "js/ownOndblclick.js" 
    ] 
} 

Вот так.

Альтернатива инъекции ownOndblclick.js это поместить его непосредственно в inject.js:

(function(){ 
    var scriptElement = document.createElement('script'); 
    scriptElement.setAttribute('type', 'text/javascript'); 
    scriptElement.innerText = 'document.ondblclick = function() { alert("free");}'; 

    document.getElementsByTagName('head')[0].appendChild(scriptElement); 
}()); 

Затем вы можете удалить web_accessible_resources из manifest.json.

+1

Спасибо. Проблема решена. Я решил перед ответом, но похож. – KKY

+0

Вы, сэр, спасли меня день за часами и часами поиска!Я пытался отвязать событие «onbeforeunload», используя расширение, и попробовал миллион опций, но только этот работал. Спасибо! –

Смежные вопросы