Я соглашусь с тем, кто написал (перефразировал здесь): «Для ссылки на существующей веб-странице браузер всегда откроет ссылку на новой вкладке, если новая страница является частью того же веб-сайт как существующая веб-страница ». Для меня, по крайней мере, это «общее правило» работает в Chrome, Firefox, Opera, IE, Safari, SeaMonkey и Konqueror.
В любом случае существует менее сложный способ воспользоваться тем, что другое человек представлен. Предполагая, что мы говорим о вашем собственном веб-сайте («thissite.com» ниже), где вы хотите контролировать, что делает браузер, а затем ниже, вы хотите, чтобы «specialpage.htm» был ПУСТОЙ, в нем вообще не было HTML-кода ( экономит время на отправку данных с сервера!).
var wnd, URL; //global variables
//specifying "_blank" in window.open() is SUPPOSED to keep the new page from replacing the existing page
wnd = window.open("http://www.thissite.com/specialpage.htm", "_blank"); //get reference to just-opened page
//if the "general rule" above is true, a new tab should have been opened.
URL = "http://www.someothersite.com/desiredpage.htm"; //ultimate destination
setTimeout(gotoURL(),200); //wait 1/5 of a second; give browser time to create tab/window for empty page
function gotoURL()
{ wnd.open(URL, "_self"); //replace the blank page, in the tab, with the desired page
wnd.focus(); //when browser not set to automatically show newly-opened page, this MAY work
}
Не чище. Рекомендуемый способ создания диалоговых окон с вкладками - сделать вкладки дочерними элементами диалогового окна. Элемент управления вкладкой просто контролирует, какая из страниц видима, но не является их родителем.
Это особенно важно, если вы попытаетесь настроить тему XP, работающую над диалогом.
WS_EX_CONTROLPARENT
- это стиль, который должен быть установлен в реальных диалоговых окнах «tab».
Предполагаю, что вы установили WS_TABSTOP
в сам элемент управления вкладками? Я предполагаю, что конфликты WS_TABSTOP
и WS_EX_CONTROLPARENT
конфликтуют, когда они сообщают диспетчеру диалога делать две совершенно разные и противоречивые вещи, когда цикл табуляции достигает элемента управления.
Наконец, я не вижу никаких причина в том, что мерцание должно увеличиваться, потому что страницы диалога являются дочерними элементами диалогового окна, а не элементом управления вкладками.
Вы не можете AFAIK, потому что табуляция циклически проходит через дочерние элементы управления по дизайну. Лучшее, что вы можете сделать, это предварительно обработать событие keydown tab и, если после фокуса находится последний элемент управления в диалоговом окне, сфокусируйте вкладку и отбросьте событие. Не чище, чем решение, которое у вас уже есть, мне кажется.