1

我正在尝试遵循不显眼的 JavaScript / 优雅降级的技术。我想在打开 JavaScript 和关闭 JavaScript 时提供具有不同链接的页面。

例如,当 JavaScript 关闭时,链接将是

<a href="script.cgi?a=action">

当 JavaScript 打开时

<a href="script.cgi?a=action;js=1">

(或类似的东西)。

链接的两个版本(带有 JavaScript 和不带 JavaScript)都指向服务器端脚本,但参数不同。当 JavaScript 关闭时要调用的版本在服务器上执行得更多,因此在那里检测 JavaScript 将是无效的(例如,从非 JavaScript 的服务器脚本通过重定向到另一个版本window.location)。

注意:我更喜欢不使用 jQuery 等 JavaScript 库/框架的解决方案。

4

5 回答 5

6

好吧,答案是使用非 Javascript 链接正常呈现页面。然后获取 Javascript 以将链接替换为 JS=1 版本。

var links = document.getElementsByTagName('a');
for (var i=0;i<links.length;i++) {
    links[i].href += ";js=1";
}
于 2009-07-22T21:26:15.120 回答
1

从非启用 Javascript 的链接开始,然后只需使用一些 Javascript 代码将链接修改为启用 Javascript 的值。这可确保链接始终是正确的版本。例如:

<a id="link_to_change" href="script.cgi?a=action">

<script type="text/javascript">
    window.onload = function(){
        document.getElementById("link_to_change").href += ";js=1";
    }
</script>
于 2009-07-22T21:24:22.080 回答
1

一个简单的解决方案,可以智能地处理没有现有查询字符串的链接。

// Get array of all links
var links = document.getElementsByTagName('a');

for (var i=0; i<links.length; i++){
    // Add a question mark if link does not already have a querystring.
    links[i].href += (/\?/.test(links[i].href)) ? '' : '?';
    links[i].href += ';js=1';
}
于 2009-07-22T21:31:21.833 回答
0

如果你只是做一个链接,这应该足够了:

<a href="script.cgi?a=action" onclick="this.href += ';js=1';">
于 2009-07-22T21:25:45.947 回答
0

在我的网站上,我开发了一个完全非 JavaScript 版本的网站。我在 Django 中开发并将页面的数据作为 Django 模板变量传递。我在标签中呈现页面,然后 JSONify 变量并呈现 javascript。

例如,这是我网站上地图视图的 Django 模板:

{% extends "new-base.html" %} {% load markup %} {% load tb_tags %}

{% block headcontent %}
  <script type="text/javascript">
    var mapData = {{map|jsonify}};
  </script> 
{% endblock %}


{% block content %}
  {% include "noscript/mapview.html" %}
{% endblock %}

这是使用的 noscript 模板。这是没有 JS 和搜索引擎的人使用的:

{% load tb_tags %}
<noscript>
  <link rel="stylesheet" type="text/css" href="/site_media/css/no-js.css"> 
  <style type="text/css"> div.content { padding:10px } </style>
  <div class=JSWhite>
    <h1 class=noJS>
      {% ifequal map.target.id map.places.0.node.id %}
        <a href="{{map.places.0.pages.0.url}}">{{map.target.name}}</a></h1>
      {% else %}
        <a href="{{map.target.url}}">{{map.target.name}}</a></h1>
      {% endifequal %}
    {% ifequal map.target.type 'node' %}
      &nbsp;- {{map.target.ele}} meters <BR>
    {% endifequal %}
    <span style ='color:gray; font-size:.8em; font-style:italic'>
      ({{map.target.la}},{{map.target.lo}})&nbsp;
    </span>
    <a class=JSAd target=_blank href=http://www.mytopo.com/searchgeo.cfm?lat={{map.target.la}}&lon={{map.target.lo}}&pid=trailbehind>Buy Topo Map</a> &nbsp;-&nbsp;
    <a style='font-size:.8em;color:#CC5500' target=_blank href='http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q={{map.target.name}}'>Get Directions</a>
    {% if map.target.dist %}
      <BR>{{map.target.dist}}
    {% endif %}
    {% if map.target.ascent %}
      <BR>{{map.target.ascent}}
    {% endif %}

    {% for r in map.places %}
      {% ifequal r.node.id map.target.id %} 
        <BR>
        {% if r.pages.0 %}
          {{r.pages.0.summary}}
        {% endif %}
        <UL style='list-style:none;margin-left:0; padding-left:0'>
          {% for key in r.pages %}
            {% ifnotequal forloop.counter 1 %}
              <LI><a href={{key.url}}>{{key.title}}</a><BR>
                  {{key.snippet}}
              </LI>
            {% endifnotequal %}
          {% endfor %}
        </UL>
     {% endifequal %}
   {% endfor %}
   <HR>
   <strong>(<a href="{{map.target.url}}">All</a> -
     <a href="{{map.target.url}}hiking/">Hiking</a> -
     <a href="{{map.target.url}}camping/">Camping</a> - 
     <a href="{{map.target.url}}climbing/">Climbing</a> - 
     <a href="{{map.target.url}}biking/">Biking</a>)</strong><BR>
  <p>
  {% if map.places %}
    <h1>Nearby Adventures</h1>
    <UL style='list-style:none;margin:0; margin-top:10px;padding-left:0'>
      {% for r in map.places %}
        {% ifnotequal r.node.id map.target.id %} 
          <LI><h1>
      {% if r.node.trip_id %}
        <a href="{{r.node.url}}">{{r.pages.0.title}}</a></h1>
      {% else %}
       <a href="{{r.node.url}}{{activity}}">{{r.pages.0.title}}</a></h1>
          {% endif %}
      {% if r.pages.0 %}
            {% if r.pages.0.activity %}
          <strong>{{r.pages.0.activity}}</strong> -
            {% endif %}
            {{r.pages.0.snippet}}
     {% endif %}
   {% endifnotequal %}
     {% endfor %}
   {% endif %}
   </UL>
   </p>
  </div>
</noscript>
于 2009-07-22T21:49:48.443 回答