Открыть URL в том же окне и на той же вкладке


361

Я хочу открыть ссылку в том же окне и на той же вкладке, которая содержит страницу со ссылкой.

Когда я пытаюсь открыть ссылку с помощью window.open, она открывается в новой вкладке, а не в той же вкладке в том же окне.

Ответы:


600

Вам нужно использовать атрибут имени:

window.open("https://www.youraddress.com","_self")

Изменить : URL должен предшествовать протоколу. Без этого пытается открыть относительный URL. Протестировано в Chrome 59, Firefox 54 и IE 11.


2
Второй аргумент - это просто имя нового окна, например атрибут target=tag a. На самом деле, вы можете назвать свое окно как угодно. Все, что вам нужно, это установить другое значение, чтобы оно не открывалось в одном окне или вкладке.
ijse

12
@ijse На самом деле есть несколько специальных имен, одно из которых '_self', которое относится к win / tab, в котором выполняется код.;)
vdbuilder

5
«_self» не указано в документах MDN [ developer.mozilla.org/en-US/docs/Web/API/Window/open] для window.open (). Более кросс-браузерное решение - использовать location.replace ().
Брайан Рейнер

1
Ссылка MDN в приведенном выше комментарии автоматически связывается с 404. Ссылка на developer.mozilla.org/en-US/docs/Web/API/Window/open
groovecoder,

_selfупоминается в разделе 5.1.6 Просмотр контекста имен на Рекомендации W3C HTML5 28 октября 2014 по адресу: w3.org/TR/html/browsers.html#browsing-context-names (но window.locationвсе еще чище).
Дем Пилафян


62

Чтобы убедиться, что ссылка открыта в той же вкладке, вы должны использовать window.location.replace()

Смотрите пример ниже:

window.location.replace("http://www.w3schools.com");

Источник: http://www.w3schools.com/jsref/met_loc_replace.asp


3
Это не сохраняет историю просмотра, мы не должны ее использовать. вместо этого попробуйте ссылочную ссылку window.open (" google.com", "_ top" ) geeksforgeeks.org/…
shyam_

2
это хорошо для меня, спасибо чувак
Ангелус Роман

29

Вы можете перейти на ту же страницу, не указав URL:

window.open('?','_self');

Это не та же страница. Это удалит любую строку запроса из существующего URL.
Квентин

20

Если у вас есть страницы внутри "frame", то "Window.open ('logout.aspx', '_ self')"

будет перенаправлен внутри того же кадра. Итак, используя

"Window.open('logout.aspx','_top')"

мы можем загрузить страницу как новый запрос.


11

Одна из наиболее заметных особенностей JavaScript - запуск обработчиков onclick на лету. Я нашел следующий механизм более надежным, чем использование location.href=''или location.reload()или window.open:

// this function can fire onclick handler for any DOM-Element
function fireClickEvent(element) {
    var evt = new window.MouseEvent('click', {
        view: window,
        bubbles: true,
        cancelable: true
    });

    element.dispatchEvent(evt);
}

// this function will setup a virtual anchor element
// and fire click handler to open new URL in the same room
// it works better than location.href=something or location.reload()
function openNewURLInTheSameWindow(targetURL) {
    var a = document.createElement('a');
    a.href = targetURL;
    fireClickEvent(a);
}

Приведенный выше код также полезен для открытия новой вкладки / окна и обхода всех блокировщиков всплывающих окон !!! Например

function openNewTabOrNewWindow(targetURL) {
    var a = document.createElement('a');
    a.href = targetURL;

    a.target = '_blank'; // now it will open new tab/window and bypass any popup blocker!

    fireClickEvent(a);
}

10

Откройте другой URL, как клик по ссылке

window.location.href = "http://example.com";


5

window.open(url, wndname, params)У него есть три аргумента. если вы не хотите, чтобы он открывался в том же окне, просто установите другое имя wndname. такие как :

window.open(url1, "name1", params); // this open one window or tab
window.open(url1, "name2", params); // though url is same, but it'll open in another window(tab).

Вот подробности о window.open(), вы можете доверять этому!
https://developer.mozilla.org/en/DOM/window.open

попробуйте ~~


7
Вопрос очень четко о желании открыть в том же окне и той же вкладке !
SNag

2

С HTML 5 вы можете использовать историю API .

history.pushState({
  prevUrl: window.location.href

}, 'Next page', 'http://localhost/x/next_page');
history.go();

Затем на следующей странице вы можете получить доступ к объекту состояния следующим образом

let url = history.state.prevUrl;
if (url) {
  console.log('user come from: '+ url)
}

1

Это довольно просто. Откройте первое окно какwindow.open(url, <tabNmae>)

Пример: window.open("abc.com",'myTab')

и для следующего всего window.open, используйте то же имя вкладки вместо _self, _parentи т. д.



1
   Just Try in button.

   <button onclick="location.reload();location.href='url_name'" 
   id="myButton" class="btn request-callback" >Explore More</button>

   Using href 

  <a href="#" class="know_how" onclick="location.reload();location.href='url_name'">Know More</a> 

Нет никакого смысла запускать перезагрузку текущей страницы, а затем отменить ее в следующем операторе, загрузив новую страницу.
Квентин

-3

Как говорят судьи MDN, просто нужно дать имя новому window/ tab.

https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Syntax

открыть на текущей вкладке с помощью _self

<a
 href="url"
 target="_self">
   open
</a>
const autoOpenAlink = (url = ``) => {
  window.open(url, "open testing page in the same tab page");
}

открыть в новой вкладке с помощью _blank

демо-версия

    <div style="margin: 5px;">
        <a
            :href="url"
            @click="autoOpenAlink"
            target="_blank"
            >
            {{url}}
        </a>
    </div>

вю

    autoOpenAlink(e) {
        e.preventDefault();
        let url = this.url;
        window.open(url, "iframe testing page");
    },

Вы не можете достоверно знать название текущего окна. Лучше последовать совету из этого ответа 2011 года и использовать специальное имя _self.
Квентин

Ваш первый пример просто неверен. _blank - это явно безымянное новое окно или вкладка.
Квентин

не за что! если я установлю _self, он откроется на текущей странице, что плохо для меня, мне просто нужна одна новая страница.
xgqfrms

Вопрос не в том, что вам нужно! Если вы хотите ответить на вопрос о том, что вам нужно, то найдите вопрос, спрашивающий об этом.
Квентин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.