Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript getElementById在Google Chrome扩展中不适用于<;嵌入>;_Javascript_Flash_Google Chrome Extension_Embed_Getelementbyid - Fatal编程技术网

Javascript getElementById在Google Chrome扩展中不适用于<;嵌入>;

Javascript getElementById在Google Chrome扩展中不适用于<;嵌入>;,javascript,flash,google-chrome-extension,embed,getelementbyid,Javascript,Flash,Google Chrome Extension,Embed,Getelementbyid,在我的Google Chrome扩展内容脚本中,我有以下内容: jQuery(document).ready(function() { var player = document.getElementById('player'); console.log(player); console.log(document); }); 我在任何Hulu视频上运行它,其中嵌入了以下id='player' <embed id="player" type="application

在我的Google Chrome扩展内容脚本中,我有以下内容:

jQuery(document).ready(function() {
    var player = document.getElementById('player');
    console.log(player);
    console.log(document);
});
我在任何Hulu视频上运行它,其中嵌入了以下id='player'

<embed id="player" type="application/x-shockwave-flash" src="/site-player/playerwrapper.swf?cb=e80c477cL" width="100%" height="428" style="z-index:10;" name="player" quality="high" allowscriptaccess="always" allowfullscreen="true" bgcolor="#000000" flashvars="bitrate=700000&amp;user_id=-1&amp;startLoadWrapperTime=1299572732904&amp;overrideBrand=&amp;referrer=http://www.hulu.com/watch/20338/saturday-night-live-steve-carell-monologue#continuous_play=on&amp;continuous_play_on=true&amp;sortBy=&amp;initMode=4&amp;modes=4&amp;content_id=7751491&amp;cb=2011-3-8-8&amp;v=3">
app.js:

jQuery(document).ready( function() {
    var player = document.getElementById('player');
    console.log(player);
    console.log(document);
});
jquery-1.5.1.min.js:我刚刚下载了它


我在Mac电脑上使用的是Chrome 10.0.648.127版,但我也在PC上试用过,效果也一样

在Chrome 9中效果很好

试试这把小提琴:


如果控制台没有显示播放器标签,则说明您的浏览器有问题。如果是这样,则说明代码有问题。为了弄清楚我需要看更多的东西。

原来问题出在时间上。即使它位于jQuery(document).ready()中,getElementById仍然失败,因为嵌入尚未加载。当我执行几秒钟的setTimeout时,getElementById工作。

在JS中直接执行与DOM相关的操作是不正确的。例如:

default.html

<!DOCTYPE HTML>
<html>
    <head>
    <script type="text/javascript" src="default.js"></script>
    </head>
    <body>
         <a id="Bar" href="#"></a>
    </body>
</html>
此时,DOM内容可能还没有完全加载,这就是“bar”可能为“NULL”的原因

正确的方法是:

default.js

const bar = document.getElementById("Bar");
alert(bar.id);
document.addEventListener('DOMContentLoaded', function() {
  const bar = document.getElementById("Bar");
  alert(bar.id);
  });
即:在发生DOMContentLoaded事件时执行与DOM相关的操作

“setTimeout”不是正确的方法,因为您无法通过设置一些时间延迟来确保DOM内容已完全加载

使用延迟

<script defer>...</script>
。。。

使用扩展文件的完整转储更新了我的问题。延迟属性仅适用于外部脚本(仅当存在src属性时才应使用)。
<script defer>...</script>