Безопасный способ взаимодействия с DOM страницы от Overlay JS - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть расширение Firefox, которое обнаруживает всякий раз, когда страница загружается в браузере, и возвращает ее window и document. Я хочу прикрепить некоторые события (которые запускают функции в оверлее моего аддона) к элементам на странице, но я не знаю, как это сделать безопасным способом.

Вот пример кода:

var myExt = {
    onInit: function(){
        var appcontent = document.getElementById("appcontent");
        if(appcontent){
            appcontent.addEventListener("DOMContentLoaded", this.onPageLoad, true);
        }
    },

    onPageLoad: function(e){
        var doc = e.originalTarget;
        var win = doc.defaultView;

        doc.getElementById("search").focus = function(){
            /* ... 'Some privelliged code here' - unsafe? ... */
        };
    }
};

Так может ли кто-нибудь сказать мне, как безопасно добавлять эти события / взаимодействовать с DOM страницы?

Заранее спасибо!

1 Ответ

1 голос
/ 07 сентября 2011

Я думаю, что вы хотите прослушать событие focus, а не заменить функцию focus():

doc.getElementById("search").addEventListener("focus", function(event)
{
  if (!event.isTrusted)
    return;

  ...
}, false);

Обычно здесь мало что может пойти не так, потому что вы не обращаетесь к странице напрямую - уже есть уровень безопасности (именно поэтому замена метода focus() не будет иметь никакого эффекта ). Вы также можете убедиться, что вы действуете только на «настоящие» события, а не на события, сгенерированные веб-страницей; для этого вы проверяете event.isTrusted, как в примере кода. Но пока вы не распаковываете объекты и не запускаете код, полученный с веб-сайта, вы должны быть в безопасности.

...