Я программно добавляю необходимые сценарии в некоторые из моих компонентов Vue, например:
mounted() {
const
googleRecaptchaScript = document.createElement('script'),
recaptchaURL = 'https://www.google.com/recaptcha/api.js';
googleRecaptchaScript.setAttribute('src', recaptchaURL);
googleRecaptchaScript.setAttribute('id', 'grecaptchascript');
document.head.appendChild(googleRecaptchaScript);
},
Теперь я заметил, что если я перейду от компонента и вернусь к нему, не обновляя страницу целиком, этот Vue начнет загружать дубликаты копий вещей, которые я прикрепляю в этом вызове mounted()
. Поэтому я хотел очистить их следующим образом:
beforeDestroy() {
const gsc = document.getElementById('grecaptchascript');
gsc.parentElement.removeChild(gsc);
},
Однако похоже, что id
этого скрипта никогда даже не устанавливается, поэтому шаг очистки завершается неудачно.
Я делаю это совершенно неправильно? Является ли лучший шаблон для этого? Если нет, то почему мой <script>
не получает id
, который я устанавливаю?
Сноска: я знаю, что использование id
здесь проблематично, так как мы говорим о дублирующихся элементах. Я изменю это позже. Пожалуйста, рассмотрите общий случай выбора по любому произвольному атрибуту, если это поможет. Я пробовал другие атрибуты, но безуспешно.