Программно задать focus document-у - JavaScript
Доброго времени суток. Обращаюсь к тем, кто понимает о чем пойдет речь.
Есть интересная задача (для меня точно интересная). Начальный данные: Браузер Chrome, а если быть точным то движок web-Kit.
Есть скрипт, который выполняется только тогда, когда имеется фокус у document. Этот же скрипт на opera ver. 12 выполняется вне зависимости от фокуса. Может выполнятся и когда просматривается другая вкладка и когда свернут браузер. Мною были предприняты следующие действия задать задать программно фокус документу вот таким путем: [table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
[/td][td]element.focus()[/td][/tr][/table][/td][/tr][/table]Также было выяснено, что скрипт работает, когда фокус был на неком элементе (допустим input): [table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
[/td][td]document.activeElement[/td][/tr][/table][/td][/tr][/table]Следующее действие было задать фокус этому элементу.
Этот элемент фокус получил, но скрипт продолжал не выполнятся. Далее через
[table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
[/td][td]console.log[/td][/tr][/table][/td][/tr][/table]была выведено следующее значение
[table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
[/td][td]document.hasFocus()[/td][/tr][/table][/td][/tr][/table]через
[table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
[/td][td]setInterval[/td][/tr][/table][/td][/tr][/table]. После запуска interval-а мышью было попеременное переключение с документа на console и было проанализировано, что когда мышь находилась на документе фокус у него появлялся.
Вы можете сами опробовать:
[table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
[/td][td] setInterval("console.log(document.hasFocus())",1000)[/td][/tr][/table][/td][/tr][/table][table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[/td][td]function start_timer(progress, progressBar) {
var wf = 0;
var wo = 0;
var lwf = 1;
var t = 0;
var e = t;
var handle = setInterval(function() {
var w = window;
var d = document;
if ($.browser.opera) {
var opversion = window.opera.version();
if (opversion < 15) {
lwf = 1;
} else {
$(w).focus(function() {
wo = 1
}).blur(function() {
wo = 0
});
if (wo == 0)
$(d).focus(function() {
wo = 1
}).blur(function() {
wo = 0
});
lwf = ((typeof w.hasFocus != 'undefined' ? w.hasFocus() : wo) ? 1 : 0);
}
} else {
lwf = ((typeof d.hasFocus != 'undefined' ? d.hasFocus() : wf) ? 1 : 0);
}
if (window.active && lwf == 1) {
if (t == waits) {
zalicz = true;
clearInterval(handle);
remove_bar();
} else {
show_bar(progressBar);
t += 1;
e = 282 / waits;
add_percentage(progress, e, t);
}
}
}, 1000);
}[/td][/tr][/table][/td][/tr][/table]Вот этот скрипт Это была моя идея задать фокус документу.
Если проблему выполнения скрипта с потерей фокуса можно решить по другому , буду рад услышать любой совет
Спасибо
Есть интересная задача (для меня точно интересная). Начальный данные: Браузер Chrome, а если быть точным то движок web-Kit.
Есть скрипт, который выполняется только тогда, когда имеется фокус у document. Этот же скрипт на opera ver. 12 выполняется вне зависимости от фокуса. Может выполнятся и когда просматривается другая вкладка и когда свернут браузер. Мною были предприняты следующие действия задать задать программно фокус документу вот таким путем: [table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
[/td][td]element.focus()[/td][/tr][/table][/td][/tr][/table]Также было выяснено, что скрипт работает, когда фокус был на неком элементе (допустим input): [table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
[/td][td]document.activeElement[/td][/tr][/table][/td][/tr][/table]Следующее действие было задать фокус этому элементу.
Этот элемент фокус получил, но скрипт продолжал не выполнятся. Далее через
[table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
[/td][td]console.log[/td][/tr][/table][/td][/tr][/table]была выведено следующее значение
[table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
[/td][td]document.hasFocus()[/td][/tr][/table][/td][/tr][/table]через
[table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
[/td][td]setInterval[/td][/tr][/table][/td][/tr][/table]. После запуска interval-а мышью было попеременное переключение с документа на console и было проанализировано, что когда мышь находилась на документе фокус у него появлялся.
Вы можете сами опробовать:
[table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
[/td][td] setInterval("console.log(document.hasFocus())",1000)[/td][/tr][/table][/td][/tr][/table][table][tr][td]JavascriptВыделить код[/td][/tr][tr][td][table][tr][td]1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[/td][td]function start_timer(progress, progressBar) {
var wf = 0;
var wo = 0;
var lwf = 1;
var t = 0;
var e = t;
var handle = setInterval(function() {
var w = window;
var d = document;
if ($.browser.opera) {
var opversion = window.opera.version();
if (opversion < 15) {
lwf = 1;
} else {
$(w).focus(function() {
wo = 1
}).blur(function() {
wo = 0
});
if (wo == 0)
$(d).focus(function() {
wo = 1
}).blur(function() {
wo = 0
});
lwf = ((typeof w.hasFocus != 'undefined' ? w.hasFocus() : wo) ? 1 : 0);
}
} else {
lwf = ((typeof d.hasFocus != 'undefined' ? d.hasFocus() : wf) ? 1 : 0);
}
if (window.active && lwf == 1) {
if (t == waits) {
zalicz = true;
clearInterval(handle);
remove_bar();
} else {
show_bar(progressBar);
t += 1;
e = 282 / waits;
add_percentage(progress, e, t);
}
}
}, 1000);
}[/td][/tr][/table][/td][/tr][/table]Вот этот скрипт Это была моя идея задать фокус документу.
Если проблему выполнения скрипта с потерей фокуса можно решить по другому , буду рад услышать любой совет
Спасибо
21 декабря 2015 в 18:04