Для этого есть два элемента: предварительная загрузка значков и их динамическая установка.
Первая часть может быть достигнута различными способами. Я бы выбрал метод Vue created
, так как вы можете показывать счетчик на странице, пока компонент не станет mounted
. Это, вероятно, лучше подходит как миксин, а не непосредственно на компоненте.
data() {
return {
favicons: {} // we need to store the images to prevent the browser releasing them
}
},
created () {
// This can be improved but the logic is here
// Create the JS images
this.favicons = {
'online': new Image(),
'offline': new Image()
};
// Set the source properties
this.favicons.online.src = 'https://snackify-cdn.sfo2.digitaloceanspaces.com/favicon-on.png';
this.favicons.offline.src = 'https://snackify-cdn.sfo2.digitaloceanspaces.com/favicon-off.png';
}
Затем, чтобы обновить значок, вы можете сделать что-то вроде следующего:
handleConnectivityChange (status) {
// Get or create the favicon
let link = document.querySelector("link[rel*='icon']") || document.createElement('link');
// Set the attributes of the favicon
link.type = 'image/x-icon';
link.rel = 'shortcut icon';
link.href = status ? this.favicons.online.src : this.favicons.offline.src;
// Append the favicon to the `head`
document.getElementsByTagName('head')[0].appendChild(link);
}
Кредит для: Динамическое изменение иконки сайта
В качестве примечания, и это только мое мнение, я бы посоветовал отказаться от jQuery, если вы используете Vue. Это очень мало нужно, и это только увеличивает накладные расходы. В этом сценарии вы можете очень легко использовать vanilla JS для достижения того, что вам нужно, как показано в примере. .