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
This question has an open bounty worth +50
reputation from Antoine V ending in 5 days.
This question has not received enough attention.
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
This question has an open bounty worth +50
reputation from Antoine V ending in 5 days.
This question has not received enough attention.
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 yesterday
asked Nov 16 at 14:48
Antoine V
4,9322423
4,9322423
This question has an open bounty worth +50
reputation from Antoine V ending in 5 days.
This question has not received enough attention.
This question has an open bounty worth +50
reputation from Antoine V ending in 5 days.
This question has not received enough attention.
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
yesterday
I will award you after 22h
– Antoine V
yesterday
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
yesterday
I will award you after 22h
– Antoine V
yesterday
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
yesterday
I will award you after 22h
– Antoine V
yesterday
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 yesterday
yurzui
90.7k10176199
90.7k10176199
Wow, it works. Thanks for a simple solution. I'm newbie in angular
– Antoine V
yesterday
I will award you after 22h
– Antoine V
yesterday
add a comment |
Wow, it works. Thanks for a simple solution. I'm newbie in angular
– Antoine V
yesterday
I will award you after 22h
– Antoine V
yesterday
Wow, it works. Thanks for a simple solution. I'm newbie in angular
– Antoine V
yesterday
Wow, it works. Thanks for a simple solution. I'm newbie in angular
– Antoine V
yesterday
I will award you after 22h
– Antoine V
yesterday
I will award you after 22h
– Antoine V
yesterday
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 yesterday
Antoine V
4,9322423
4,9322423
add a comment |
add a comment |
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