Відкрити URL-адресу в тому ж вікні та в одній вкладці


361

Я хочу відкрити посилання в тому ж вікні і в тій самій вкладці, що містить сторінку із посиланням.

Коли я намагаюся відкрити посилання за допомогою window.open, тоді воно відкриється в новій вкладці, а не в тій самій вкладці в тому ж вікні.

Відповіді:


599

Вам потрібно використовувати атрибут імені:

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

Редагувати : URL-адреса має бути попередньо встановлена ​​протоколом. Без цього намагається відкрити відносну URL-адресу. Випробувано в Chrome 59, Firefox 54 та IE 11.


2
Другий аргумент - це лише ім'я нового вікна, як атрибут target=тегу a. Насправді ви можете назвати своє вікно все, що завгодно. Все, що вам потрібно, встановіть його інше значення, так що воно не відкриється в одному вікні чи вкладці.
ijse

11
@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все ще чистіше).
Dem Pilafian


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
це добре для мене, дякую чувак
Angelus Roman

28

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

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

Це не та сама сторінка. Це видалить будь-який рядок запиту з існуючої URL-адреси.
Квентін

20

Якщо у вас є сторінки в "кадрі", тоді "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), має три аргументи. якщо ви не хочете, щоб воно відкривалося в одному вікні, просто встановіть інше ім'я wnd. як от :

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/uk/DOM/window.open

спробувати ~~


7
Питання дуже чітко про те, що потрібно відкрити в одному вікні та в одній вкладці !
SNag

2

З html 5 ви можете використовувати API 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

vue demo

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

vue

    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.