Esta é a mensagem de erro que recebo:
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided
('https://www.youtube.com') does not match the recipient window's origin
('http://localhost:9000').
Já vi outros problemas semelhantes onde a origem de destino está http://www.youtube.com
e a origem do destinatário https://www.youtube.com
, mas nenhum como o meu onde o destino está https://www.youtube.com
e a origem está http://localhost:9000
.
- Eu não entendi o problema. Qual é o problema?
- Como posso corrigir isso?
javascript
angularjs
youtube
youtube-api
youtube-iframe-api
Adam Zerner
fonte
fonte
Respostas:
Acredito que este seja um problema com a origem de destino
https
. Eu suspeito que é porque seu URL do iFrame está usando emhttp
vez dehttps
. Tente alterar o URL do arquivo que você está tentando incorporarhttps
.Por exemplo:
ser estar:
fonte
http
vs.https
? Não importa que os domínios sejam diferentes (youtube vs. localhost)? E o que exatamente é a origem de destino versus a origem do destinatário? Como fazer o que você disse mudou a origem do destinatário (meu URL ainda é localhost: 9000)?localhost:9000
. O problema estava na maneira como você estava usando o youtube-api. Quando você declara a API comotag.src = "https://www.youtube.com/iframe_api";
no seu código, diz ao youtube que deseja usar o SSL. Então, a alteração que sugeri mudou para você usando ssl para solicitar os vídeos. O erro estava apenas dizendo que você estava misturando chamadas SSL e NÃO SSL.playerEl = document.querySelector('iframe#ytplayer'); anotherEl.appendChild(playerEl); // yt complains on subsequent api calls
Basta adicionar o parâmetro
"origin"
com o URL do seu site noparamVars
atributo do player, assim:fonte
window.location.origin
..window.location
é um objeto.window.location.host
Definir isso parece corrigi-lo:
fonte
http
(em vez dehttps
) resolveu meu problema.host: `${window.location.protocol}//www.youtube.com`
,Você pode salvar o JavaScript em arquivos locais:
No primeiro arquivo,
player_api
coloque este código:No segundo arquivo, encontre o código:
this.a.contentWindow.postMessage(a,b[c]);
e substitua-o por:
Obviamente, você pode concatenar em um arquivo - será mais eficiente. Esta não é uma solução perfeita, mas funciona!
Minha fonte: yt_api-concat
fonte
Verifique se você está carregando de um URL como:
https://www.youtube.com/embed/HIbAz29L-FA?modestbranding=1&playsinline=0&showinfo=0&enablejsapi=1&origin=https%3A%2F%2Fintercoin.org&widgetid=1
Observe o componente "origin", bem como "enablejsapi = 1". A origem deve corresponder ao seu domínio e, em seguida, ela estará na lista de permissões e funcionará.
fonte
Tente usar
window.location.href
o URL para corresponder à origem da janela.fonte
Eu recebi o mesmo erro. Meu erro foi que o
enablejsapi=1
parâmetro não estava presente noiframe
src.fonte
Eu acho que a descrição do erro é enganosa e originalmente tem a ver com o uso incorreto do objeto player.
Eu tive o mesmo problema ao mudar para novos vídeos em um Slider.
Ao usar simplesmente a
player.destroy()
função descrita aqui, o problema desaparece.fonte
Eu tive esse mesmo problema e, ao que parece, era porque eu estava executando a extensão "HTTPS Everywhere" do Chrome. Desativar a extensão resolveu meu problema.
fonte
Este erro exato estava relacionado a um bloco de conteúdo do YouTube quando "reproduzido em determinados sites ou aplicativos". Mais especificamente por WMG (Warner Music Group).
No entanto, a mensagem de erro sugeria que a importação de iframe https para um site http era o problema, o que não ocorria nesse caso.
fonte
Remover a Pré-busca DNS resolverá esse problema.
Se você estiver usando o WordPress, adicione esta linha nas funções do seu tema.php
fonte
Você pode alterar o iframe para ficar assim e adicionar a origem ao site atual. Ele resolve o erro no meu navegador.
ref: https://developers.google.com/youtube/iframe_api_reference#Loading_a_Video_Player
fonte
Pode haver um dos seguintes, mas todos eles levam ao DOM não carregado antes de ser acessado pelo javascript.
Então, aqui está o que você deve garantir antes de realmente chamar o código JS: * Verifique se o contêiner foi carregado antes que qualquer javascript seja chamado * Verifique se o URL de destino está carregado em qualquer contêiner que ele precise
Me deparei com o problema semelhante, mas no meu local quando estou tentando executar o Javascript bem antes do onLoad da página principal que causa a mensagem de erro. Corrigi-o simplesmente aguardando o carregamento da página inteira e, em seguida, chamo a função necessária.
Você pode simplesmente fazer isso adicionando uma função de tempo limite quando a página for carregada e chamar seu evento onload como:
window.onload = nova função () {setTimeout (function () {// algum evento onload}, 10); }
isso garantirá que o que você está tentando executará bem depois que o onLoad for acionado.
fonte
document.addEventListener("DOMContentLoaded", function () {
infelizmente não ajudou.Você também recebe essa mensagem quando não especifica um targetOrigin nas chamadas para
window.postMessage()
.Neste exemplo, postamos uma mensagem no primeiro iFrame e usamos
*
como destino, o que deve permitir a comunicação com qualquer targetOrigin.fonte
Na minha instância, pelo menos, isso parece ser uma condição inofensiva "não pronta", que a API tenta novamente até que seja bem-sucedida.
Recebo de dois a nove deles (no meu pior caso, um FossilBook de 2009 com 20 abas abertas via hotspot de celular) ... mas o vídeo funciona corretamente. Depois de executar minhas chamadas pós-baseadas em Message to seekTo definitivamente funcionar, não testei outras.
fonte
Em alguns casos (como um comentarista mencionou), isso pode ser causado se você estiver movendo o player dentro do DOM, como
append
ou etc.fonte
Podes tentar :
fonte
Eu também estava enfrentando o mesmo problema, então visito o oficial Iframe Api do Youtube, onde encontrei isso:
e passear ao ver que a página oficial também estava enfrentando esse problema. Basta visitar a oficial Iframe Api do YouTube e ver os registros do console. Minha versão do Chrome é 79.0.3945.88.
fonte
o meu era:
Acabei de remover a linha com o playerVars, e funcionou sem erros no console.
fonte