Подтвердить что ты не робот

Фокусная вкладка или окно

для небольшого приложения, я открываю несколько окон/вкладок из моего script. Независимо от того, открывает ли браузер окно или вкладка, конечно, не в моей руке.

Тем не менее, я держу ссылки на вновь созданные объекты window, и я изменяю их содержимое "удаленно" из другого окна. Все это происходит при той же document.domain, что и проблема xss.

Проблема в том, что я не могу надежно focus создавать созданные окна/вкладки. Поскольку я пишу очень специфическое приложение для клиента, я только ориентирую Firefox как браузер. Один из вариантов, который у меня есть, - это, конечно, сделать remoteWindow.alert('foobar');, чтобы получить окно/вкладку вверх, но это довольно уродливо, не так ли.

Я нашел этот ответ Как сфокусировать окно/вкладку как предупреждение()?

и там сказано, что Firefox имеет возможность разрешить фокус script. Итак, наконец, мой вопрос: что это за вариант? Я искал about:config для "вкладок" и "фокуса", но не нашел ничего связанного.

Как настроить?

4b9b3361

Ответ 1

Единственное решение, которое я вижу, - заставить всплывающее окно в новом окне, поскольку, похоже, не существует способа сфокусировать другую вкладку. Это решение также требует, чтобы вы изменили настройки безопасности Javascript по умолчанию в Tools > Options > Content tab и нажмите кнопку Advanced рядом с Enable Javascript и установите флажок в среднем окне, чтобы разрешить фокусировку окон.

Чтобы заставить использовать окно, а не вкладку, используйте win = window.open("http://www.google.com", "test" ,"modal=yes");, а затем вызовите win.focus(); всякий раз, когда вам хочется.

EDIT: На самом деле забыл упомянуть о том, что это только FF.

Ответ 2

В IE8 и FF13 работает следующее:

<script type="text/javascript">
// Stupid script to force focus to an existing tab when the link is clicked.
// And yes, we do need to open it twice.
function openHelp(a) {
    var tab = window.open(a.href, a.target);
    tab.close();
    tab = window.open(a.href, a.target);
    return false;
}
</script>
<a href="help.html" target="help" onclick="return openHelp(this);">Help</a>

Ответ 3

См. документацию Mozilla: https://developer.mozilla.org/en/Code_snippets/Tabbed_browser.

  var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                     .getService(Components.interfaces.nsIWindowMediator);
  var browserEnumerator = wm.getEnumerator("navigator:browser");

  // Check each browser instance

  while (browserEnumerator.hasMoreElements()) {
    var browserWin = browserEnumerator.getNext();
    var tabbrowser = browserWin.gBrowser;

    // Check each tab of this browser instance
    var numTabs = tabbrowser.browsers.length;
    for (var index = 0; index < numTabs; index++) {
      var currentBrowser = tabbrowser.getBrowserAtIndex(index);
      if (/*some logic*/) {

        // For an example
        tabbrowser.selectedTab = tabbrowser.tabContainer.childNodes[index];

        // Focus *this* browser-window
        browserWin.focus();
        break;
      }
    }

Вот более простой подход, основанный на событиях - https://developer.mozilla.org/En/Listening_to_events_on_all_tabs.

Ответ 5

Нет никакого реального способа сделать это по той простой причине, что если бы на сайтах была эта способность, они в конечном итоге использовали бы это для автоматической фокусировки рекламы или чего-то еще.

Это можно сделать, но только в Firefox, если пользователь разрешил его, чего, скорее всего, не будет.

Ответ 6

Чтобы ответить на ваш вопрос: я нашел http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#RaiseLowerSetting, в котором говорится, что настройка, которую вы ищете, называется "разрешить рейз и нижние окна".

Другой параметр будет about:config/dom.disable_window_flip (to false), найденный здесь.

Ответ 7

Пробовали ли вы в меню Инструменты → Параметры... → вкладка "Содержание" → "Дополнительно" рядом с "Включить JavaScript", чтобы установить флажок "Поднять или опустить Windows"?

Пример того, как установить фокус, можно найти здесь.

Ответ 8

Это грязный и уродливый, так что это всего лишь дополнительная информация: если вы вызываете предупреждение() в любой из открытых вкладок/окон, эта вкладка будет получать фокус.

Ответ 9

Простой ответ: вы не можете. Браузеры не предоставляют такой API для javascript.

Ответ 10

Открытие новых окон/вкладок браузера является проблематичным. Вы рассмотрели диалоговое окно jqueryui вместо открытия нового окна?

Ответ 11

Расширение вклада Alex выше. Вариант использования имеет CMS. Когда владелец сайта регистрируется в CMS, а передняя часть загружается на другую вкладку. Вы даете владельцу сайта ссылку на передней панели, которая перезагружает вкладку CMS и фокусируется.

Поместите этот javacript на передние конечные страницы (или включите в глобальный JS файл):

<script type="text/javascript">
// Stupid script to force focus to an existing tab when the link is clicked.
// And yes, we do need to open it twice.
function loadAdmin(a) {
    var tab = window.open(a.href, a.target);
    tab.close();
    tab = window.open(a.href, a.target);
    return false;
}
</script>

Мне нравится помещать ссылку CMS сразу после содержимого H1. Опять же, это только если они вошли в CMS. В этом случае я указываю на Framed CMS, поэтому он должен знать, что загрузить в основной кадр (каламбур).

<h1>
    Page Heading
    <a href="/admin/main/?load=pages/page.cfm?id=#request.pageid#" title="Edit this page"
        onclick="return loadAdmin(this);"
        target="#cgi.server_name#wvAdmin"            
    ><img src="/media/admin/icon-edit.png" alt="Edit this page"/></a>
</h1>

Это, чтобы убедиться, что вкладка уникальна, если у меня в моем браузере несколько CMS (поддержка нескольких клиентов):

целевых = "# # cgi.server_name wvAdmin"

Наконец, на загрузчике фреймов в CMS добавьте это...

<script type="text/javascript">
    window.name = '#cgi.server_name#wvAdmin';
</script>

... чтобы убедиться, что если пользователь открыл CMS самостоятельно, мы все равно можем работать с ним.