Фокусная вкладка или окно
для небольшого приложения, я открываю несколько окон/вкладок из моего script. Независимо от того, открывает ли браузер окно или вкладка, конечно, не в моей руке.
Тем не менее, я держу ссылки на вновь созданные объекты window
, и я изменяю их содержимое "удаленно" из другого окна. Все это происходит при той же document.domain
, что и проблема xss.
Проблема в том, что я не могу надежно focus
создавать созданные окна/вкладки. Поскольку я пишу очень специфическое приложение для клиента, я только ориентирую Firefox как браузер. Один из вариантов, который у меня есть, - это, конечно, сделать remoteWindow.alert('foobar');
, чтобы получить окно/вкладку вверх, но это довольно уродливо, не так ли.
Я нашел этот ответ Как сфокусировать окно/вкладку как предупреждение()?
и там сказано, что Firefox имеет возможность разрешить фокус script. Итак, наконец, мой вопрос: что это за вариант?
Я искал about:config
для "вкладок" и "фокуса", но не нашел ничего связанного.
Как настроить?
Ответы
Ответ 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.
Ответ 4
Вы пробовали window.focus()?
Ответ 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 самостоятельно, мы все равно можем работать с ним.