Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   var open и window.open (https://javascript.ru/forum/events/32525-var-open-i-window-open.html)

testdriver 19.10.2012 11:12

var open и window.open
 
Проблема, я пишу скрипт который будет подключаться на случайные сайты (их владельцами), доступа к коду которого у меня нет и возможности его отредактировать тоже.
В моем скрипте используется открытие нового окна с помощью window.open, если перед подключением моего скрипта на странице имеется глобальная переменная var open = 5 (например), то оригинальная функция window.open перезаписывается и перестает работать. Как можно в такой ситуации открыть новое окно? Может быть можно как-то обратиться к оригинальной функции window.open или ее отнаследовать, интересуют любые варианты решения данной проблемы

Skipp 19.10.2012 11:48

var alert = function(){
	console.log("Не работает");
}
alert = Window.prototype.alert;
alert("Работает");

testdriver 19.10.2012 12:19

теперь в opera попробуйте

Skipp 19.10.2012 13:04

Серьёзно? Интересно почему, наверное у оперы нету класса Window?
Другие варианты знаешь?

Я знаю ещё один, не делать того, что в последствии заставит вставлять костыли.

Убери переменную и проблема исчезнет.

testdriver 19.10.2012 13:13

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

Skipp 19.10.2012 13:31

Цитата:

Сообщение от testdriver
потому, что у оперы объект window немного отличается и то, что вы написали там работать не будет

Во первых это не объект window, объект window и там и там есть.
alert(window);

Во вторых исходя из твоей логики либо человек читающий не внимательно твой пост является не разумным или же только разумные люди читают первый пост внимательно?

testdriver 19.10.2012 14:08

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

Gvozd 19.10.2012 19:54

Создайте чистый фрейм, и возьмите функцию оттуда
Возможно нужно будет задать в качестве this текущее окно

dmitriymar 19.10.2012 20:08

Цитата:

Сообщение от testdriver
что скрипт будет подключаться в тело стороннего сайта, доступа к которому у меня нет,

если скрипт подключается к стороннему сайту-доступ к нему по любому будет. -XSS

Nekromancer 19.10.2012 20:16

testdriver,
Во первых, вам никто не обязан, по этому не нужно здесь так выссказываться. Скажите спасибо, что вам хоть как то пытаются помочь.

Во вторых, Gvozd только, что дал самый лучший вариант, который скорее всего будет самым кросс-браузерным.

В третьих, в Опере существуют баг, так называемый, который идёт в разрез со спецификацие ES5 и видимо и DOM. По спецификации в Lexical Environment, в частности в Object Environment, свойства должно и могут наследоваться из прототипа, как в обычных объектах, по цепочке. По этому, в нормальных браузерах, которые это реализуют, следующий подход должен работать:

var myOpen = window.constructor.prototype.open.bind(this);


Часовой пояс GMT +3, время: 05:02.