2016-03-17 2 views
0

я смог открыть новую вкладку, а затем закрыть его от родительского делать что-то вроде этого:Как закрыть вкладку браузера от его происхождения

<a id="mylink" href="javascript:" onclick="mynewwindow = window.open('https://www.google.co.in');" target="_blank">Sample Code</a> 
    <a href="javascript:" onclick="closemywindow();">close</a> 
    <script> 
     var mynewwindow; 
     function closemywindow(){ 
      mynewwindow.close(); 
     } 
</script> 

Но если новая вкладка открывается через контекст меню или с помощью прокрутки, как я могу закрыть эту новую вкладку?

ответ

0

Результат window.open - это еще одна ссылка на окно. На вашей странице вы можете просто использовать window.close.

Просто имейте в виду, что если это единственная открытая вкладка, она может попросить пользователя разрешить закрытие окна.

Благодаря комментарию Даррена я понимаю, что вы можете закрыть окна из центральной точки. Это может работать с внешней веб-службой. Ваши ссылки могут быть в форме http://anotherpage?openedfrom=thispage, а затем новая страница может периодически связываться с центральной точкой и посмотреть, нужно ли ее закрывать. На исходной странице вы можете указать службе «закрыть все окна, открытые этим». В этом контексте «эта страница» будет случайным образом сгенерированным ключом для идентификации начальной страницы.

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

Вот код для него (тестовый HTML файл называется test13.html - изменить название соответственно):

<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script> 
<a href="test13.html" target="_blank">A link</a><br/> 
<input type="button" value="Close all opened windows"/> 
<script> 
function guid() { //generates a random GUID like string 
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 
     var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); 
     return v.toString(16); 
    }); 
} 

window.windowKey=guid(); //generates a key for the window 
//uncomment this if you want all the opened pages to share a key 
//var m=/[\?&]windowKey=([^\?&]+)/.exec(document.location.href); 
//if (m) window.windowKey=m[1]; 


if (!window.localStorage) { 
    alert('No local storage, no autoclosing pages'); 
} else { 
    $('input').click(function() { //click on the button to close all pages referred by this one 
     window.localStorage.setItem(windowKey,"yes"); 
    }); 

    window.localStorage.setItem(windowKey,"no"); // you could skip this if you don't want to list the opened window keys 
    $(window).on('beforeunload',function() { 
     window.localStorage.removeItem(windowKey); // clean up localStorage 
    }); 


    setInterval(function() { 
     var m=/[\?&]windowKey=([^\?&]+)/.exec(document.location.href); 
     if (!m) return; 
     var referralKey=m[1]; //get the key from the windowKey URL parameter 
     var shouldClose=window.localStorage.getItem(referralKey)=="yes"; 
     if (shouldClose) window.close(); //close this page if the key is marked for closing 
    },1000); 


    // you might want to execute this on window.ready 
    $('a').each(function() { //add the window key to all the links on the page 
     var a=$(this); 
     var url=a.attr('href'); 
     url=url+(/\?/.test(url)?'&':'?')+'windowKey='+windowKey; 
     a.attr('href',url); 
    }); 
} 
</script> 

Если вы хотите поддержать сценарий: страница А открывает страницу B, которая открывает страницу C, а затем закрывается B и C, измените Guid строку:

window.windowKey=guid(); 
var m=/[\?&]windowKey=([^\?&]+)/.exec(document.location.href); 
if (m) window.windowKey=m[1]; 
+0

Это Безразлично Не работайте - он хочет знать, как закрыть вкладку FROM страницы, с которой он открыл ее (например, щелкнуть правой кнопкой мыши и открыть на новой вкладке) (верьте, это то, на что он надеется. – Darren

+0

Я добавил код для решения проблемы проблема в вопросе, но я не считаю, что это хороший дизайн. Разумеется, при условии, что вы не открываете ссылки с другим экземпляром браузера. –

-1

Вы не можете закрыть окна, которые были не создан с window.open(). Это было бы очень плохое поведение, например. потому что при этом история вкладок также будет удалена. Вкладка принадлежит пользователю, а не вам.

https://developer.mozilla.org/en-US/docs/Web/API/Window/close

0

Решение может быть, что на всех страницах есть скрипт, который имеет таймер, который закрывает окно, если нет событие мыши на этой странице.

document.addEventListener("DOMContentLoaded", function(event) { 
    var timeoutID; 
    timeoutID = window.setTimeout(closeWindow, 2000); 
    document.addEventListener('mousemove', clearAlert, false); 

    function clearAlert() { 
     window.clearTimeout(timeoutID); 
     document.removeEventListener('mousemove', clearAlert, false); 
    } 
    function closeWindow() { 
     window.close(); 
    } 
}); 

Я не совсем уверен, если это будет работать или нет, но она может также всегда закрыть окно на мобильный телефон или браузер не будет выполнять сценарий, пока вы не переключитесь на вкладку

Смежные вопросы