【问题标题】:Is there anyway to change <html> tag's attributes during run time?是否有在运行时更改 <html> 标签的属性?
【发布时间】:2014-05-05 22:05:02
【问题描述】:

我想在运行时添加manifest属性,这样我就可以控制何时下载Appcache。

例如:当用户正确登录应用程序时,

<html>
// page content
</html>

变成:

<html manifest="myapp.manifest">
// page content
</html>

无论如何我可以使用 javascript、jquery 或任何东西来实现这一点吗?我想要的是控制何时有条件地下载 Appcache。(我已经阅读过关于在 iFrame 中有另一个 html。)

【问题讨论】:

    标签: javascript jquery html html5-appcache


    【解决方案1】:

    可能无法有效地添加清单属性,但可以将其删除,这样您可以获得相同的结果。

    要禁用 appcache,我使用这个:

    window.console.warn('removing appcache');
    window.document.documentElement.removeAttribute('manifest');
    

    请小心,这可能并不总是有效!

    【讨论】:

      【解决方案2】:

      可以使用向元素添加属性的常规方法,例如

      document.documentElement.setAttribute('manifest', 'foo.appcache');
      

      (正如@FelixKing 在评论中指出的那样,根据规范,分配给document.documentElement.manifest 不起作用,因为manifest 没有在DOM 中定义。我首先被Chrome 在这个问题上的行为误导了。)

      但是,这没有任何效果。 HTML5 CR says:“manifest 属性仅在文档加载的早期阶段有效。因此动态更改属性没有任何效果(因此,没有为此属性提供 DOM API)。”

      (嗯,它具有存在的效果,因此您可以在样式中使用属性,检索属性值等。但不会导致应用程序缓存操作。)

      【讨论】:

      • 很好地找到了关于属性处理的信息。但无论哪种方式,HTMLHTMLElements 都没有 manifest 属性,所以无论如何这都不是正确的设置方法。
      【解决方案3】:

      According to the specification,文档加载后更改manifest属性无效。

      您仍然可以通过document.documentElement: 访问html 元素并更改属性值

      document.documentElement.setAttribute('manifest', 'myapp.manifest');
      

      它不会做任何事情。

      【讨论】:

      • 问题是,这有关系吗? appcache 清单文件告诉浏览器要缓存什么,我不确定在页面加载后添加对该文件的引用会以任何方式影响浏览器缓存,我可能认为它不会,并且清单文件仅在页面加载时加载,但从未对此进行过测试。无论如何,+1,这确实按照要求添加了属性!
      • @adeneo:这就是我说我不知道​​它是否有任何影响时的意思。你措辞更好:) 老实说,我现在懒得测试它。
      • @FelixKling 我真的很感兴趣 attr 有效但不支持为什么? jsfiddle.net/YY4BL/2
      • @C-link:首先是因为属性-选择器不考虑属性,其次是因为HTMLHTMLElements根本没有这样的属性。
      • @C-link - felix 所说的,浏览器通常读取 HTML 并创建 DOM,在其中创建对象,并根据 HTML 和浏览器默认设置属性。换句话说,如果 HTML 标记本身没有 manifest 属性,那么稍后添加一个也无济于事,因为这不是浏览器读取的内容,浏览器读取 HTML,并将属性添加到 HTML 元素中。跨度>
      【解决方案4】:

      通过 jQuery 试试这个。

      $('html').attr('manifest', 'myapp.manifest');
      

      【讨论】:

        【解决方案5】:

        您可以使用.attr()

        获取集合中第一个元素的属性值 匹配的元素或为每个匹配的元素设置一个或多个属性 元素。

        $('html').attr('manifest','myapp.manifest');
        

        【讨论】:

          【解决方案6】:

          试试这个:

          document.documentElement.setAttribute('manifest', 'myapp.manifest');
          

          来自docs

          document.documentElement

          返回作为文档根元素的元素(例如 例如,HTML 文档的元素)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-01-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多