Насколько я знаю, window.location делает именно то, что вы ищете, вызывая по умолчанию ссылку на ссылку браузера по умолчанию.
Некоторые браузеры замечают протокол до того, как будут запущены какие-либо события или фактический href Изменен.
window.location = "mailto:somebody@example.com";
Попробуйте демонстрацию скрипта, упомянутую ниже. Я получаю следующие результаты:
onbeforeunload
с помощью кнопки и ссылки onbeforeunload
только для кнопки onbeforeunload
хороший способ предотвратить запуск события unload
- это вернуть false в beforeunload
.
Если вы хотите, чтобы путь был указан только в URL-адресе, укажите ссылку на путь с привязки, которую вы щелкнули. Вы также не должны использовать атрибуты для определения обработчика кликов.
$('a').on('click', function (evt) {
evt.preventDefault()
var path = hideref(this.pathname);
console.log(path);
//window.location.href = path;
});
function hideref(strUrl) {
return "https://example.com/?q=" + encodeURIComponent(strUrl);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="https://example.com/post/1">link 1</a>
Вместо использования this.href
для отправки URL-адреса в функцию hideref
следует использовать this.pathname
( источник ).
Ваш код будет выглядеть так:
<script type="text/javascript">
$('a').click(function() {
window.location.href = hideref(this.pathname + this.search);
return false;
});
function hideref(strUrl){
return "https://test.xyz/?q="+escape(strUrl);
}
</script>
Вам необходимо
$('a').on('click',function(e) {
e.preventDefault(); // stop the link
var newUrl = "https://test.xyz/?q="+encodeURIComponent(this.pathname+this.search);
console.log(newUrl); // delete this and uncomment next line
// window.location=newUrl;
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="https://example.com/post/1">link 1</a>
<a href="https://example.com/post/1?bla=bla1">link 2</a>