dolphin 正在阅读 noscript 部分
Posted
技术标签:
【中文标题】dolphin 正在阅读 noscript 部分【英文标题】:noscript section being read by dolphin 【发布时间】:2012-09-28 11:50:54 【问题描述】:Dolphin 浏览器和默认 android 浏览器正在读取我页面顶部的 <noscript>
部分,即使在这些浏览器中打开了 javascript。这会导致这些页面的内容不被呈现。
在标题中,我链接到一个 css 样式表,当浏览器中关闭 javascript 时,该样式表将页面上 div 内的任何内容设置为无。它通过驻留在非脚本元素中来做到这一点,因此只有在没有 javascript 时才会读取样式表。
这适用于我测试的所有桌面/笔记本电脑浏览器(未在我无权访问的 mac 上测试)。它适用于带有 Firefox 和 Opera 的 Android。我只有 cyanongenmod 7,所以我没有 Google Chrome。
但是,对于 Dolphin 和默认的 Android 浏览器,它们会读取位于 noscript 部分的 css 样式表,并且几乎整个页面/站点都不会在这些浏览器中呈现。
我已经通过从头部删除样式表链接来证明这是正在发生的事情,并且页面在这些浏览器中正确呈现。
有没有办法让这些浏览器尊重 head 部分的 noscript 标签?
更新:这是使用 html5 - 头部中的 noscript 是允许的:http://www.w3.org/TR/html5/the-noscript-element.html#the-noscript-element
<!DOCTYPE html>
<html>
<head>
<noscript>
<link href="$facesContext.externalContext.requestContextPath/css/no_javascript.css" rel="stylesheet" type="text/css" />
<!-- this link is being read even if javascript in enabled in dolphin -->
</noscript>
</head>
<body>
<noscript>
stuff in this noscript element works correctly
</noscript>
<div class="no_javascript_disapear">
page full of stuff not being rendered because
dolphin browser is not respecting the noscript
tags in the head.
</div>
</body>
</html>
// css in the noscript tag:
.no_javascript_disapear display:none;
【问题讨论】:
【参考方案1】:也许您可以使用 javascript 来删除该样式表?
阅读此问题以了解如何Access Contents of <noscript> with Javascript
否则,您可以在 no-js 样式表中添加标题:
<link title="noJsStylesheet" href="....css" rel="stylesheet" type="text/css" />
并使用此功能将其删除:
for(i=0; (a = document.getElementsByTagName("link")[i]); i++)
if(a.getAttribute("title") == 'noJsStylesheet') a.disabled = true;
但我真的不确定它是否适用于这个特定的 Dolphin 版本。
【讨论】:
工作得很好,谢谢。这么多要学。我终于掌握了 jsf,接下来是 javascript。一次只能走一步。 :) 至少我可以查看您的代码并“得到它”。 :) 感谢帮助【参考方案2】:根据作为 W3C 建议发布的 HTML 规范,noscript
元素只允许在 body
中使用。浏览器也可能在head
中允许它,但你不能指望它。只是说您使用 HTML5 并不会改变这一点;浏览器做他们做的事,有时可能会实现部分 HTML5 草稿。
HTML5 草案一般recommends against using noscript
:“noscript 元素是一种钝器。有时,可能会启用脚本,但由于某种原因,页面的脚本可能会失败。出于这个原因,通常最好避免使用 noscript,而是设计脚本以将页面从无脚本页面动态更改为脚本页面”(下面是一个示例)。
因此,最好的方法是渐进式增强:首先设计页面,使其无需编写脚本即可工作。然后,以非中断方式添加脚本。这可能涉及通过脚本添加一些 CSS 规则(这比删除一些更自然)。
但如果您需要快速修复,您可以考虑在现在位于 noscript
内的 link
元素之后添加一个 script
元素,其中包含用于立即从文档树中删除该元素的代码。
顺便说一句,我的老式 Android 2.3.5 默认浏览器似乎在 head
内支持 noscript
。
【讨论】:
很好理解。我想做渐进式增强,但我正在从后端编程转向 web/前端 jsf。而这只是我。所以拳头我只需要得到一些工作。然后我可以让它优雅地增强或失败。 :) +1 收获以上是关于dolphin 正在阅读 noscript 部分的主要内容,如果未能解决你的问题,请参考以下文章
与 firefox NoScript 插件一起使用的 noscript 标签的替代品