Adding onload to body

时间:2010-08-25 作者:Norcross

我目前正在尝试开发一个插件,通过一个短代码将Google Earth Tour嵌入到WP帖子/页面中。

我遇到的问题是,要加载教程,我必须添加onload="init()" 进入<body> 标签

我可以修改特定的模板文件,但由于这是发布版,我需要通过挂钩动态添加它。有什么想法吗?

5 个回复
最合适的回答,由SO网友:Norcross 整理而成

做了更多的挖掘,找到了一种“更好”的方式让它工作(谷歌让他们该死的地球之旅很难嵌入,而他们的小工具不起作用)。

最后我做了一个plugin 它使用短代码和自定义字段的组合。

SO网友:EAMann

这里有一个jQuery解决方案(正如Mike在第一条评论中所建议的)。

function add_my_scripts() {
    wp_enqueue_script( \'jquery\' );
    wp_enqueue_script( \'my_init_script\', SCRIPTSRC, \'jquery\', \'1.0\' );
}
add_action( \'init\', \'add_my_scripts\' );
然后将脚本添加到插件中,以执行以下操作:

jQuery.noConflict();

jQuery(document).ready(function($) {
    init();
});
这将在无冲突模式下启动jQuery(如果还没有),并向init() 方法。这是一种比body onready() 因为onready() 函数只能调用一件事。。。因此,其他人无法将任何内容挂接到该脚本或添加自定义脚本。最好使您的插件尽可能不引人注目,这样其他插件就不会干扰,反之亦然。

SO网友:artlung

这里有一个方法。您可以添加add_action() 我想,打电话到你的钩子里去吧。我包含的JavaScript假定已经定义了init函数。如果没有,那么这将失败,但如果我理解正确的话,包含脚本似乎是您已经解决的问题。请注意,您不一定需要将其添加到wp_foot, 您可以轻松地将其添加到wp_head:

<?php

function mypluginprefix_onload_init() { ?>
<script language="text/javascript">
// check for the standards-compliant way to add onload events
if ( typeof(window.addEventListener) !== \'undefined\' )
    window.addEventListener( "load", init, false );
// or the older msie nonstandard way
else if ( typeof(window.attachEvent) !== \'undefined\' ) {
    window.attachEvent( "onload", init );
}
</script>
<?php }

// this goes in your hook
add_action(\'wp_foot\', \'mypluginprefix_onload_event\');
?>

SO网友:MikeSchinkel

忽略使用jQuery进行此操作的可能性,可以做的一件事是hook the template_include filter and use ob_start() 通过回调。然后,您的回调可以在上执行字符串搜索\'<body\' 并用\'<body onload="init()"\' 就像下面的代码一样。您应该能够直接将其放入插件中,只需确保更改名称以遵循插件自己的命名约定:

<?php
add_filter(\'template_include\',\'start_buffer_capture\',1);
function start_buffer_capture($template) {
  ob_start(\'end_buffer_capture\');  // Start Page Buffer
  return $template;
}
function end_buffer_capture($buffer) {
  return str_replace(\'<body\',\'<body onload="init()"\',$buffer);
}
请注意,如果我是您,我不会假设上述代码是完全健壮的。我怀疑它是否能处理所有的边缘案例,因为我只是把它放在一起回答你的问题,但它至少向你展示了如何完成正常案例,然后通过一些用例测试,我确信你“能处理所有重要的边缘案例(比如如果\'<BODY\' 是否大写等?)

SO网友:Annika Backstrom

以下是一些JavaScript,可以在有无jQuery的情况下动态向页面加载添加回调:

function add_onload() {
    ?>
    <script type="text/javascript">
    my_onload_callback = function() { alert(\'Hello!\'); }; // test function

    if( typeof jQuery == "function" ) { 
        jQuery(my_onload_callback); // document.ready
    } else {
        document.getElementsByTagName(\'body\')[0].onload = my_onload_callback; // body.onload
    }
    </script>
    <?php
}
add_action( \'wp_footer\', \'add_onload\' );
在您的情况下,只需用init方法替换my\\u onload\\u回调。

结束

相关推荐

How do you debug plugins?

我对插件创作还很陌生,调试也很困难。我用了很多echo,它又脏又丑。我确信有更好的方法可以做到这一点,也许是一个带有调试器的IDE,我可以在其中运行整个站点,包括插件?