Youtube Iframe can't work without refresh
up vote
3
down vote
favorite
To reproduce the problem in Stackblitz, click GO
to navigate to the component containing iframe
, it works now, then go back and forward, the iframe
disappears. You have to refresh the page to show the iframe
again.
I tried some workaround :
- I tried to release the object in
ngOnDestroy
window['onYouTubeIframeAPIReady'] = null;
but not success
This is the code how to create iframe
init() {
var tag = document.createElement('script');
tag.src = 'https://www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
}
ngOnInit() {
this.init();
window['onYouTubeIframeAPIReady'] = (e) => {
this.YT = window['YT'];
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
};
}
TEMPLATE
<div id="player" >
</div>
Someone has a workaround with success please share, please.
angular youtube-iframe-api
add a comment |
up vote
3
down vote
favorite
To reproduce the problem in Stackblitz, click GO
to navigate to the component containing iframe
, it works now, then go back and forward, the iframe
disappears. You have to refresh the page to show the iframe
again.
I tried some workaround :
- I tried to release the object in
ngOnDestroy
window['onYouTubeIframeAPIReady'] = null;
but not success
This is the code how to create iframe
init() {
var tag = document.createElement('script');
tag.src = 'https://www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
}
ngOnInit() {
this.init();
window['onYouTubeIframeAPIReady'] = (e) => {
this.YT = window['YT'];
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
};
}
TEMPLATE
<div id="player" >
</div>
Someone has a workaround with success please share, please.
angular youtube-iframe-api
add a comment |
up vote
3
down vote
favorite
up vote
3
down vote
favorite
To reproduce the problem in Stackblitz, click GO
to navigate to the component containing iframe
, it works now, then go back and forward, the iframe
disappears. You have to refresh the page to show the iframe
again.
I tried some workaround :
- I tried to release the object in
ngOnDestroy
window['onYouTubeIframeAPIReady'] = null;
but not success
This is the code how to create iframe
init() {
var tag = document.createElement('script');
tag.src = 'https://www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
}
ngOnInit() {
this.init();
window['onYouTubeIframeAPIReady'] = (e) => {
this.YT = window['YT'];
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
};
}
TEMPLATE
<div id="player" >
</div>
Someone has a workaround with success please share, please.
angular youtube-iframe-api
To reproduce the problem in Stackblitz, click GO
to navigate to the component containing iframe
, it works now, then go back and forward, the iframe
disappears. You have to refresh the page to show the iframe
again.
I tried some workaround :
- I tried to release the object in
ngOnDestroy
window['onYouTubeIframeAPIReady'] = null;
but not success
This is the code how to create iframe
init() {
var tag = document.createElement('script');
tag.src = 'https://www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
}
ngOnInit() {
this.init();
window['onYouTubeIframeAPIReady'] = (e) => {
this.YT = window['YT'];
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
};
}
TEMPLATE
<div id="player" >
</div>
Someone has a workaround with success please share, please.
angular youtube-iframe-api
angular youtube-iframe-api
edited Nov 19 at 8:53
asked Nov 16 at 14:48
Antoine V
4,9472424
4,9472424
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
3
down vote
accepted
You can check if youtube api has been already initialized and then just create your player:
player: any;
init() {
if (window['YT']) {
this.createPlayer();
return;
}
var tag = document.createElement('script');
tag.src = 'https://www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
window['onYouTubeIframeAPIReady'] = () => this.createPlayer();
}
ngOnInit() {
this.init();
}
createPlayer() {
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
}
ngOnDestroy() {
window['onYouTubeIframeAPIReady'] = null;
if (this.player) {
this.player.destroy();
}
}
Forked Stackblitz
Wow, it works. Thanks for a simple solution. I'm newbie in angular
– Antoine V
Nov 19 at 10:18
I will award you after 22h
– Antoine V
Nov 19 at 10:19
add a comment |
up vote
1
down vote
After one week, a workaround that works but it seems "dirty".
In fact, after go back and forward, the function window['onYouTubeIframeAPIReady']
doesn't execute anymore.
So, I put a boolean in this method, reset to false
if it's executed. Then, a function check to need to reload after a timeout 3s by considering this value
//this.needToReload = true in constructor
ngAfterViewInit(){
let n = 3;
var intervalId= setInterval(() => {
n--;
this.tick = n*10;
if (n === 0) {
clearInterval(intervalId);
if(this.needToReload)
{
location.reload();
}
}
}, 1000);
}
ngOnInit() {
this.init();
window['onYouTubeIframeAPIReady'] = (e) => {
this.YT = window['YT'];
this.needToReload = false;
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
};
}
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
You can check if youtube api has been already initialized and then just create your player:
player: any;
init() {
if (window['YT']) {
this.createPlayer();
return;
}
var tag = document.createElement('script');
tag.src = 'https://www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
window['onYouTubeIframeAPIReady'] = () => this.createPlayer();
}
ngOnInit() {
this.init();
}
createPlayer() {
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
}
ngOnDestroy() {
window['onYouTubeIframeAPIReady'] = null;
if (this.player) {
this.player.destroy();
}
}
Forked Stackblitz
Wow, it works. Thanks for a simple solution. I'm newbie in angular
– Antoine V
Nov 19 at 10:18
I will award you after 22h
– Antoine V
Nov 19 at 10:19
add a comment |
up vote
3
down vote
accepted
You can check if youtube api has been already initialized and then just create your player:
player: any;
init() {
if (window['YT']) {
this.createPlayer();
return;
}
var tag = document.createElement('script');
tag.src = 'https://www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
window['onYouTubeIframeAPIReady'] = () => this.createPlayer();
}
ngOnInit() {
this.init();
}
createPlayer() {
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
}
ngOnDestroy() {
window['onYouTubeIframeAPIReady'] = null;
if (this.player) {
this.player.destroy();
}
}
Forked Stackblitz
Wow, it works. Thanks for a simple solution. I'm newbie in angular
– Antoine V
Nov 19 at 10:18
I will award you after 22h
– Antoine V
Nov 19 at 10:19
add a comment |
up vote
3
down vote
accepted
up vote
3
down vote
accepted
You can check if youtube api has been already initialized and then just create your player:
player: any;
init() {
if (window['YT']) {
this.createPlayer();
return;
}
var tag = document.createElement('script');
tag.src = 'https://www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
window['onYouTubeIframeAPIReady'] = () => this.createPlayer();
}
ngOnInit() {
this.init();
}
createPlayer() {
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
}
ngOnDestroy() {
window['onYouTubeIframeAPIReady'] = null;
if (this.player) {
this.player.destroy();
}
}
Forked Stackblitz
You can check if youtube api has been already initialized and then just create your player:
player: any;
init() {
if (window['YT']) {
this.createPlayer();
return;
}
var tag = document.createElement('script');
tag.src = 'https://www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
window['onYouTubeIframeAPIReady'] = () => this.createPlayer();
}
ngOnInit() {
this.init();
}
createPlayer() {
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
}
ngOnDestroy() {
window['onYouTubeIframeAPIReady'] = null;
if (this.player) {
this.player.destroy();
}
}
Forked Stackblitz
answered Nov 19 at 9:21
yurzui
91.6k10180202
91.6k10180202
Wow, it works. Thanks for a simple solution. I'm newbie in angular
– Antoine V
Nov 19 at 10:18
I will award you after 22h
– Antoine V
Nov 19 at 10:19
add a comment |
Wow, it works. Thanks for a simple solution. I'm newbie in angular
– Antoine V
Nov 19 at 10:18
I will award you after 22h
– Antoine V
Nov 19 at 10:19
Wow, it works. Thanks for a simple solution. I'm newbie in angular
– Antoine V
Nov 19 at 10:18
Wow, it works. Thanks for a simple solution. I'm newbie in angular
– Antoine V
Nov 19 at 10:18
I will award you after 22h
– Antoine V
Nov 19 at 10:19
I will award you after 22h
– Antoine V
Nov 19 at 10:19
add a comment |
up vote
1
down vote
After one week, a workaround that works but it seems "dirty".
In fact, after go back and forward, the function window['onYouTubeIframeAPIReady']
doesn't execute anymore.
So, I put a boolean in this method, reset to false
if it's executed. Then, a function check to need to reload after a timeout 3s by considering this value
//this.needToReload = true in constructor
ngAfterViewInit(){
let n = 3;
var intervalId= setInterval(() => {
n--;
this.tick = n*10;
if (n === 0) {
clearInterval(intervalId);
if(this.needToReload)
{
location.reload();
}
}
}, 1000);
}
ngOnInit() {
this.init();
window['onYouTubeIframeAPIReady'] = (e) => {
this.YT = window['YT'];
this.needToReload = false;
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
};
}
add a comment |
up vote
1
down vote
After one week, a workaround that works but it seems "dirty".
In fact, after go back and forward, the function window['onYouTubeIframeAPIReady']
doesn't execute anymore.
So, I put a boolean in this method, reset to false
if it's executed. Then, a function check to need to reload after a timeout 3s by considering this value
//this.needToReload = true in constructor
ngAfterViewInit(){
let n = 3;
var intervalId= setInterval(() => {
n--;
this.tick = n*10;
if (n === 0) {
clearInterval(intervalId);
if(this.needToReload)
{
location.reload();
}
}
}, 1000);
}
ngOnInit() {
this.init();
window['onYouTubeIframeAPIReady'] = (e) => {
this.YT = window['YT'];
this.needToReload = false;
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
};
}
add a comment |
up vote
1
down vote
up vote
1
down vote
After one week, a workaround that works but it seems "dirty".
In fact, after go back and forward, the function window['onYouTubeIframeAPIReady']
doesn't execute anymore.
So, I put a boolean in this method, reset to false
if it's executed. Then, a function check to need to reload after a timeout 3s by considering this value
//this.needToReload = true in constructor
ngAfterViewInit(){
let n = 3;
var intervalId= setInterval(() => {
n--;
this.tick = n*10;
if (n === 0) {
clearInterval(intervalId);
if(this.needToReload)
{
location.reload();
}
}
}, 1000);
}
ngOnInit() {
this.init();
window['onYouTubeIframeAPIReady'] = (e) => {
this.YT = window['YT'];
this.needToReload = false;
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
};
}
After one week, a workaround that works but it seems "dirty".
In fact, after go back and forward, the function window['onYouTubeIframeAPIReady']
doesn't execute anymore.
So, I put a boolean in this method, reset to false
if it's executed. Then, a function check to need to reload after a timeout 3s by considering this value
//this.needToReload = true in constructor
ngAfterViewInit(){
let n = 3;
var intervalId= setInterval(() => {
n--;
this.tick = n*10;
if (n === 0) {
clearInterval(intervalId);
if(this.needToReload)
{
location.reload();
}
}
}, 1000);
}
ngOnInit() {
this.init();
window['onYouTubeIframeAPIReady'] = (e) => {
this.YT = window['YT'];
this.needToReload = false;
this.player = new window['YT'].Player('player', {
videoId: '1cH2cerUpMQ'
});
};
}
answered Nov 19 at 9:13
Antoine V
4,9472424
4,9472424
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53340122%2fyoutube-iframe-cant-work-without-refresh%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown