2011-08-18 3 views
1

Я изо всех сил, чтобы сделать код удара работу ...window.focus() не работает с setInterval()

Тогда, я задаюсь вопросом, почему window.focus() и window.blur () методы не работают/работают только с кнопки ввода. Они не работают, когда я звоню из setInterval().

Например, в нижеследующем случае, когда я нажимаю кнопку в HTML, она делает окно в первый раз, а затем фокусирует окно со второго раза, нажимаю кнопку.

Однако я также установил setInterval(), чтобы сделать фокус окна, но он не работает. Я вижу журнал на консоли, поэтому функция setInterval работает правильно, но win.focus() как-то игнорируется.

<head> 
... 
    <script> 
    var win; 
    function makePopup(){ 
     if (!win || win.closed) { 
      win = window.open("","","width=200, height=200"); 
      win.blur(); 
     }else{ 
      win.focus(); 
      console.log("opened"); 
     } 
    } 
    setInterval(function(){makePopup();},4000); 
    </script> 
</head> 

<body> 
    <input type="button" onclick="makePopup()"/> 
</body> 

Так что проблемы:

  1. window.blur() не работает.
  2. window.focus() работает только при вызове makePopup() из кнопки HTML и не работает с setInterval().

Я тестирую в Chrome и Safari с Mac OSX.

Если бы вы могли дать мне какое-либо предложение, я действительно ценю его.

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

+1

Я не уверен, это может быть вещь безопасности, но на всякий случай, когда вы этого не знали, вы также можете сделать 'setInterval (makePopup, 4000);', поскольку это просто функция, которую вы хотите вызвать каждый время. – pimvdb

+0

fyi, при настройке этого интервала вам не нужно передавать функцию, вызывающую 'makePopup', вы можете просто передать идентификатор' makePopup' следующим образом: 'setInterval (makePopup, 4000)' – Shad

+0

Спасибо за советы ! Да, я знаю путь, но просто использовал для написания этого :) – leccmo

ответ

1

Браузер знает разницу между тем, кто нажал ссылку, чтобы открыть всплывающее окно и когда он запускается скриптом. Чтобы предотвратить вредоносную активность, многие браузеры предотвращают всплывающие окна со сценарием.

Указав URL-адрес, который находится в том же домене, что и размещенная страница, он должен работать.

+0

Спасибо за ваш ответ Diodeus!
Теперь я вызываю
win.open ("test.html", "", "width = 200, height = 200")
с "localhost /". Он открывает окно из сценария, но не переориентирует окно после его открытия, тогда я фокусирую другое окно ...
Я хотел бы сделать всплывающее окно активным в определенные периоды после его открытия. – leccmo

+0

Если это работает, проголосуйте и примите ответ. –

+0

Поместите некоторый скрипт в всплывающее окно, которое устанавливает фокус на себя. –

Смежные вопросы