19.10.2012, 11:12
|
Интересующийся
|
|
Регистрация: 23.03.2009
Сообщений: 11
|
|
var open и window.open
Проблема, я пишу скрипт который будет подключаться на случайные сайты (их владельцами), доступа к коду которого у меня нет и возможности его отредактировать тоже.
В моем скрипте используется открытие нового окна с помощью window.open, если перед подключением моего скрипта на странице имеется глобальная переменная var open = 5 (например), то оригинальная функция window.open перезаписывается и перестает работать. Как можно в такой ситуации открыть новое окно? Может быть можно как-то обратиться к оригинальной функции window.open или ее отнаследовать, интересуют любые варианты решения данной проблемы
|
|
19.10.2012, 11:48
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
var alert = function(){
console.log("Не работает");
}
alert = Window.prototype.alert;
alert("Работает");
__________________
.
Последний раз редактировалось Skipp, 19.10.2012 в 11:51.
|
|
19.10.2012, 12:19
|
Интересующийся
|
|
Регистрация: 23.03.2009
Сообщений: 11
|
|
теперь в opera попробуйте
|
|
19.10.2012, 13:04
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
Серьёзно? Интересно почему, наверное у оперы нету класса Window?
Другие варианты знаешь?
Я знаю ещё один, не делать того, что в последствии заставит вставлять костыли.
Убери переменную и проблема исчезнет.
__________________
.
Последний раз редактировалось Skipp, 19.10.2012 в 13:10.
|
|
19.10.2012, 13:13
|
Интересующийся
|
|
Регистрация: 23.03.2009
Сообщений: 11
|
|
потому, что у оперы объект window немного отличается и то, что вы написали там работать не будет. По поводу костылей, если читать первый пост внимательно, разумному человеку становиться понятно зачем я задаю этот вопрос
|
|
19.10.2012, 13:31
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
Сообщение от testdriver
|
потому, что у оперы объект window немного отличается и то, что вы написали там работать не будет
|
Во первых это не объект window, объект window и там и там есть.
alert(window);
Во вторых исходя из твоей логики либо человек читающий не внимательно твой пост является не разумным или же только разумные люди читают первый пост внимательно?
__________________
.
Последний раз редактировалось Skipp, 19.10.2012 в 13:34.
|
|
19.10.2012, 14:08
|
Интересующийся
|
|
Регистрация: 23.03.2009
Сообщений: 11
|
|
не засоряйте тему, вариант предложенный вами не кроссбраузерный, высказывание убери переменную и все заработает неуместно, так как выше доходчиво написано, что скрипт будет подключаться в тело стороннего сайта, доступа к которому у меня нет, следовательно убрать переменную там я не могу. Упражняться в логике или беседовать на эту тему лучше в соответствующем форуме.
|
|
19.10.2012, 19:54
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Создайте чистый фрейм, и возьмите функцию оттуда
Возможно нужно будет задать в качестве this текущее окно
|
|
19.10.2012, 20:08
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
Сообщение от testdriver
|
что скрипт будет подключаться в тело стороннего сайта, доступа к которому у меня нет,
|
если скрипт подключается к стороннему сайту-доступ к нему по любому будет. -XSS
|
|
19.10.2012, 20:16
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
testdriver,
Во первых, вам никто не обязан, по этому не нужно здесь так выссказываться. Скажите спасибо, что вам хоть как то пытаются помочь.
Во вторых, Gvozd только, что дал самый лучший вариант, который скорее всего будет самым кросс-браузерным.
В третьих, в Опере существуют баг, так называемый, который идёт в разрез со спецификацие ES5 и видимо и DOM. По спецификации в Lexical Environment, в частности в Object Environment, свойства должно и могут наследоваться из прототипа, как в обычных объектах, по цепочке. По этому, в нормальных браузерах, которые это реализуют, следующий подход должен работать:
var myOpen = window.constructor.prototype.open.bind(this);
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
|
|