与 firefox NoScript 插件一起使用的 noscript 标签的替代品

Posted

技术标签:

【中文标题】与 firefox NoScript 插件一起使用的 noscript 标签的替代品【英文标题】:Alternative to noscript tag that works with firefox NoScript addon 【发布时间】:2019-03-21 12:24:37 【问题描述】:

我正在制作一个网站,它使用少量 javascript javascript 来实现非必要或仅仅是美学功能。我知道有一定比例的用户更喜欢在禁用 javascript 的情况下进行导航,所以原则上我尝试在页面头部的 noscript 标记内使用 css 样式表,以便在 javascript 不可用的地方,某些页面的元素将被隐藏。

然而,虽然这种方法在浏览器中禁用 javascript 时有效,但对于使用某些浏览器扩展阻止 javascript 的用户来说它会失败(我在 Firefox 上使用 NoScript 进行了测试,当然还有其他的)。在这种情况下,用 noscript 标签实现我想要的替代方法是什么?

【问题讨论】:

【参考方案1】:

NoScript 的工作原理是从文档中删除 script 标签,从而阻止加载 js 文件,但它不会禁用脚本的执行,因此 noscript 标签不起作用。

要在 javascript 不可用时删除页面的某些元素,无论原因如何,最好的方法是默认隐藏这些元素,并在加载页面后使用 javascript 显示它们。第一步是在您的样式表中创建一个如下所示的 CSS 类,并将其应用于您不希望看到的所有内容,除非可以执行 JS 脚本:

.hideOnNoScript 
    display: none !important;

第二步是在页面加载时使用 javascript 删除该 CSS 类:

//Execute after page is ready
function ready(callback)
  // in case the document is already rendered
  if (document.readyState!='loading') callback();
  // modern browsers
  else if (document.addEventListener)
      document.addEventListener('DOMContentLoaded', callback);
  // IE <= 8
  else document.attachEvent('onreadystatechange', function()
      if (document.readyState=='complete') callback();
  );


var removeHideOnNoScript = function() 
  var elementstohide = window.top.document.querySelectorAll('.hideOnNoScript ');
  for (let i= 0; i< elementstohide.length; i++) 
    const element = elementstohide[i];
    element.classList.remove('hideOnNoScript');
  


ready(removeHideOnNoScript);

注意:我真的不喜欢使用!important,但是没有它我无法使这个解决方案工作。如果有人能指出我的替代方案,我会很高兴改变它。

【讨论】:

以上是关于与 firefox NoScript 插件一起使用的 noscript 标签的替代品的主要内容,如果未能解决你的问题,请参考以下文章

9. Web browser-related (网页浏览器相关 4个)

每次打开 Firefox 时都会发出跨站攻击警告

标题中的 WP Woo <noscript> 需要删除

Firefox使用与特色插件

火狐4.0安装了noscript和ABP后在百度知道点击彩蛋无反应,期待帮助

Firefox浏览器怎么安装adobe flash player插件