Программно задать 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]Вот этот скрипт
Это была моя идея задать фокус документу.
Если проблему выполнения скрипта с потерей фокуса можно решить по другому , буду рад услышать любой совет
Спасибо
Илья Хороший больше 1 года назадСпасибо 0
0 чел.