Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.10.2012, 11:12
Интересующийся
Отправить личное сообщение для testdriver Посмотреть профиль Найти все сообщения от testdriver
 
Регистрация: 23.03.2009
Сообщений: 11

var open и window.open
Проблема, я пишу скрипт который будет подключаться на случайные сайты (их владельцами), доступа к коду которого у меня нет и возможности его отредактировать тоже.
В моем скрипте используется открытие нового окна с помощью window.open, если перед подключением моего скрипта на странице имеется глобальная переменная var open = 5 (например), то оригинальная функция window.open перезаписывается и перестает работать. Как можно в такой ситуации открыть новое окно? Может быть можно как-то обратиться к оригинальной функции window.open или ее отнаследовать, интересуют любые варианты решения данной проблемы
Ответить с цитированием
  #2 (permalink)  
Старый 19.10.2012, 11:48
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

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

Последний раз редактировалось Skipp, 19.10.2012 в 11:51.
Ответить с цитированием
  #3 (permalink)  
Старый 19.10.2012, 12:19
Интересующийся
Отправить личное сообщение для testdriver Посмотреть профиль Найти все сообщения от testdriver
 
Регистрация: 23.03.2009
Сообщений: 11

теперь в opera попробуйте
Ответить с цитированием
  #4 (permalink)  
Старый 19.10.2012, 13:04
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

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

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

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

Последний раз редактировалось Skipp, 19.10.2012 в 13:10.
Ответить с цитированием
  #5 (permalink)  
Старый 19.10.2012, 13:13
Интересующийся
Отправить личное сообщение для testdriver Посмотреть профиль Найти все сообщения от testdriver
 
Регистрация: 23.03.2009
Сообщений: 11

потому, что у оперы объект window немного отличается и то, что вы написали там работать не будет. По поводу костылей, если читать первый пост внимательно, разумному человеку становиться понятно зачем я задаю этот вопрос
Ответить с цитированием
  #6 (permalink)  
Старый 19.10.2012, 13:31
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Сообщение от testdriver
потому, что у оперы объект window немного отличается и то, что вы написали там работать не будет
Во первых это не объект window, объект window и там и там есть.
alert(window);

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

Последний раз редактировалось Skipp, 19.10.2012 в 13:34.
Ответить с цитированием
  #7 (permalink)  
Старый 19.10.2012, 14:08
Интересующийся
Отправить личное сообщение для testdriver Посмотреть профиль Найти все сообщения от testdriver
 
Регистрация: 23.03.2009
Сообщений: 11

не засоряйте тему, вариант предложенный вами не кроссбраузерный, высказывание убери переменную и все заработает неуместно, так как выше доходчиво написано, что скрипт будет подключаться в тело стороннего сайта, доступа к которому у меня нет, следовательно убрать переменную там я не могу. Упражняться в логике или беседовать на эту тему лучше в соответствующем форуме.
Ответить с цитированием
  #8 (permalink)  
Старый 19.10.2012, 19:54
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Создайте чистый фрейм, и возьмите функцию оттуда
Возможно нужно будет задать в качестве this текущее окно
Ответить с цитированием
  #9 (permalink)  
Старый 19.10.2012, 20:08
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от testdriver
что скрипт будет подключаться в тело стороннего сайта, доступа к которому у меня нет,
если скрипт подключается к стороннему сайту-доступ к нему по любому будет. -XSS
Ответить с цитированием
  #10 (permalink)  
Старый 19.10.2012, 20:16
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

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

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

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

var myOpen = window.constructor.prototype.open.bind(this);
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция выделения текста в textarea, не работает в IE Alexander333 Internet Explorer 6 30.06.2012 18:21
как вывести видео Brook Общие вопросы Javascript 7 23.04.2012 19:22
Правки динамического меню Angel_33_3 Элементы интерфейса 1 30.06.2011 13:00
Библиотека javascript эффектов HelpeR Ваши сайты и скрипты 39 15.05.2010 21:30
Четырехзначные числа вместо русских букв alosito Общие вопросы Javascript 4 13.05.2008 23:51