var open и window.open
Проблема, я пишу скрипт который будет подключаться на случайные сайты (их владельцами), доступа к коду которого у меня нет и возможности его отредактировать тоже.
В моем скрипте используется открытие нового окна с помощью window.open, если перед подключением моего скрипта на странице имеется глобальная переменная var open = 5 (например), то оригинальная функция window.open перезаписывается и перестает работать. Как можно в такой ситуации открыть новое окно? Может быть можно как-то обратиться к оригинальной функции window.open или ее отнаследовать, интересуют любые варианты решения данной проблемы |
var alert = function(){ console.log("Не работает"); } alert = Window.prototype.alert; alert("Работает"); |
теперь в opera попробуйте
|
Серьёзно? Интересно почему, наверное у оперы нету класса Window?
Другие варианты знаешь? Я знаю ещё один, не делать того, что в последствии заставит вставлять костыли. Убери переменную и проблема исчезнет. |
потому, что у оперы объект window немного отличается и то, что вы написали там работать не будет. По поводу костылей, если читать первый пост внимательно, разумному человеку становиться понятно зачем я задаю этот вопрос
|
Цитата:
alert(window); Во вторых исходя из твоей логики либо человек читающий не внимательно твой пост является не разумным или же только разумные люди читают первый пост внимательно? |
не засоряйте тему, вариант предложенный вами не кроссбраузерный, высказывание убери переменную и все заработает неуместно, так как выше доходчиво написано, что скрипт будет подключаться в тело стороннего сайта, доступа к которому у меня нет, следовательно убрать переменную там я не могу. Упражняться в логике или беседовать на эту тему лучше в соответствующем форуме.
|
Создайте чистый фрейм, и возьмите функцию оттуда
Возможно нужно будет задать в качестве this текущее окно |
Цитата:
|
testdriver,
Во первых, вам никто не обязан, по этому не нужно здесь так выссказываться. Скажите спасибо, что вам хоть как то пытаются помочь. Во вторых, Gvozd только, что дал самый лучший вариант, который скорее всего будет самым кросс-браузерным. В третьих, в Опере существуют баг, так называемый, который идёт в разрез со спецификацие ES5 и видимо и DOM. По спецификации в Lexical Environment, в частности в Object Environment, свойства должно и могут наследоваться из прототипа, как в обычных объектах, по цепочке. По этому, в нормальных браузерах, которые это реализуют, следующий подход должен работать: var myOpen = window.constructor.prototype.open.bind(this); |
Часовой пояс GMT +3, время: 00:40. |