0

我正确地将一个 javascript 文件插入到 wordPress 管理员中:

 wp_enqueue_script()

我知道脚本正在加载。我用alert(). 然后我发现我无法访问 DOM。当我尝试:

document.getElementsByTagName('body')[0].addEventListener('load', function() {});

这个错误是:

Uncaught TypeError: Cannot call method 'addEventListener' of undefined

这是我第一次使用“设置 api”或将脚本插入 WordPress 管理员。

4

4 回答 4

1

您的代码可能在 DOM 完全加载<body>且不可用之前执行。如果你想在加载时运行一个函数,我会使用jQuery.ready()jQuery,因为默认情况下 jQuery 在 Wordpress 中已经可用:

jQuery(document).ready(function($){ /* your code */ });

http://api.jquery.com/ready/

于 2012-09-23T21:31:04.540 回答
1

您实际上想将 load 事件处理程序添加到windownot body. 一方面,在解析 BODY 标记之前,正文不存在。如果您的脚本在 HEAD 中,那么将任何内容附加到正文还为时过早。因此,如果您希望脚本在加载 DOM 之前不运行,您无法通过尝试将事件处理程序添加到 DOM 中的对象来实现。

强烈建议使用 JS 框架来处理这个问题。添加您自己的功能以在页面加载时运行是您希望跨浏览器兼容且易于扩展的功能。主要的 JS 框架已经解决了这个问题,尝试手动解决这个问题几乎没有什么收获。

于 2012-09-23T21:34:17.643 回答
1

我想你可以试试这个

document.addEventListener('DOMContentLoaded', load, false);

或者

window.onload=load; // onload will work in all browsers so use this

和你的处理程序

function load(){ ... }

您也可以按照Fabrício Matté's 的方法。

于 2012-09-23T21:44:47.647 回答
0

将脚本排入footer页面。

那时您将不需要 DOM 就绪处理程序,更不用说负载侦听器了。
而且正如@Dancrumb 回答的那样,loadwindow事件而不是事件body

默认情况下,WP 在head. body如果没有侦听器/延迟执行,则无法直接从访问元素,head因为 DOM 解析器根本还没有到达body标签。通过将脚本放在页脚中,它可以确保 DOM 已经准备好让您的脚本运行。

的语法wp_enqueue_script()是:

wp_enqueue_script( 
     $handle
    ,$src
    ,$deps
    ,$ver
    ,$in_footer 
);

因此,对于您的用例,将第 5 个选项设置为true.

于 2012-09-23T21:43:52.063 回答