【问题标题】:Safari 12.1 unload not firing javascriptSafari 12.1 卸载不触发 javascript
【发布时间】:2023-03-14 07:35:01
【问题描述】:

我的 javascript 不能在 Safari 中触发,但适用于所有其他浏览器(iOS Safari、Chrome、Firefox、Opera、IE)。

我已经在所有其他浏览器(iOS Safari、Chrome、Firefox、Opera、IE)上对此进行了测试,并且在 Safari 11.1 上有效。

HTML:

body onload="showdiv('Citizenship');"

Javascript:

    var pages = document.getElementsByClassName("page");

    function showdiv(id_page) 
    {
        for(var count_page=0; count_page<pages.length; count_page++)
        {
            str_id = pages.item(count_page).id;
            if (id_page == str_id)
            {
                document.getElementById(str_id).style.display = 'block';
                document.getElementById(str_id).focus();
            } // if (id_page == str_id)
            else
            {
                document.getElementById(str_id).style.display = 'none';
            } // if (id_page == str_id) else
        } // for(var count_page=0; count_page<pages.length; count_page++)
    } // function showdiv(id_page) 

我没有收到控制台错误消息。

该页面可以在http://www.ocetacea.net/MAT/EDLT6616/DigitalCitizenship/index.html找到

我的目标是只有“什么是数字公民?”页面加载后。

【问题讨论】:

  • 这一行的目的是什么:str_id = pages.item(count_page).id;pages.item 是函数吗?
  • .item() 是一种返回 NodeList 对象中指定索引处的节点的方法。本例中的 NodeList 是页面,我在 showdiv 函数之前定义。
  • 感谢您将链接发布到您的页面。我相信我现在明白了这个问题。

标签: javascript safari onload


【解决方案1】:

在 Safari 中,似乎在页面的所有内容下载后触发 body onload 事件。

在您的情况下,您有大约 40mb 的视频需要在 Safari 触发正文加载操作之前完成加载。要解决此问题,您可以通过另一种方式触发 showdiv() 函数,例如:

document.addEventListener('readystatechange', function() {
  if(document.readyState === 'interactive'){
  showdiv('Citizenship');
  }
});

注意:这在 Safari 中适用于我,但我还没有尝试过其他浏览器。

此外,您可能希望阻止自动下载视频以节省数据传输成本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 2015-07-11
    相关资源
    最近更新 更多