Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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 Onesignal插件_Javascript_Jquery_Wordpress_Deferred - Fatal编程技术网

Javascript Onesignal插件

Javascript Onesignal插件,javascript,jquery,wordpress,deferred,Javascript,Jquery,Wordpress,Deferred,你好,我有一个wordpress网站,我已经按照GT Metrix建议推迟了脚本设置。除Onesignal推送通知插件外,所有脚本均被延迟 <script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async></script> function js_defer_attr($tag){ $scripts_to_exclude = array('.jsdelivr'); foreach($scripts

你好,我有一个wordpress网站,我已经按照GT Metrix建议推迟了脚本设置。除Onesignal推送通知插件外,所有脚本均被延迟

<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async></script>

function js_defer_attr($tag){

$scripts_to_exclude = array('.jsdelivr');

foreach($scripts_to_exclude as $exclude_script){
   if(true == strpos($tag, $exclude_script ) )
      return $tag;
}
   return str_replace( ' src', ' defer="defer" onload src', $tag );
}
add_filter( 'script_loader_tag', 'js_defer_attr', 10 );

函数js\u defer\u attr($tag){
$scripts_to_exclude=数组('.jsdeliver');
foreach($scripts\u to\u exclude as$exclude\u script){
if(true==strpos($tag,$exclude_script))
返回$tag;
}
返回str_replace('src','defer=“defer”onload src',$tag);
}
添加过滤器('script\u loader\u tag','js\u defer\u attr',10);
我猜这是在页面加载/延迟完成后添加脚本加载

有什么帮助吗?
干杯

我在我的网站上做了,现在效果很好。。。更重要的页面内容将首先加载。这样用户体验更好

我会解释我做了什么


我更改了OneSignal插件代码,并将所有这些代码转移到另一个文件的头中。当文件不存在时,将在运行时创建该文件

假设我创建了一个名为“onesignal_deferred.js”的新文件

然后我在页面的页脚添加了:

function add_script(url){
   var element = document.createElement("script");
   element.src = url;
   document.body.appendChild(element);
}        
function downloadJSAtOnload(){
    add_script("add_script("https://<domain>/onesignal_deferred.js")
}
if (window.addEventListener)
    window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
    window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
函数添加_脚本(url){
var元素=document.createElement(“脚本”);
element.src=url;
document.body.appendChild(元素);
}        
函数downloadJSAtOnload(){
添加脚本(“添加脚本(”https:///onesignal_deferred.js")
}
if(window.addEventListener)
addEventListener(“加载”,downloadJSAtOnload,false);
else if(窗口附件)
window.attachEvent(“onload”,downloadJSAtOnload);
else window.onload=下载jsatonload;
清单也不是必需的…因为它适用于较旧版本的Chrome…所以这是一个新的优化,您可以为每个页面视图保存一个以上的请求

我还可以使用相同的功能“添加脚本”来推迟其他脚本,如谷歌分析和任何其他脚本


p、 美国:当你推迟Google Analytics时,有时它不会将加载事件之前关闭的页面视为视图…在这种情况下,你可能会被虚假的Google Analytics报告欺骗,该报告称页面加载速度更快。这种情况下,加载太慢的页面将不会被计算在内…因为Google分析脚本甚至不会被加载

“我更改了OneSignal插件代码”听起来不太好:/“当您更新插件时,您直接对插件核心文件所做的任何更改都将被覆盖”