1

Я стараюсь следовать за ненавязчивым JavaScript/грациозным деградации. Я хочу показывать страницу с разными ссылками, когда включен 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).

Примечание: Я бы предпочел решение без использования библиотек JavaScript/фреймворков, таких как jQuery.

+1

Мне не нравится хрупкость, предполагающая, что действие querystring param всегда будет там. Почему бы не отдельный параметр, например, js = 1? – RedFilter

+0

Строка запроса в первом примере имеет параметр «a» со значением «action», пример раздела имеет то же самое, но добавляет параметр «js» со значением «1». (Обратите внимание, что и & являются взаимозаменяемыми во всех библиотеках обработки правильных запросов). – Quentin

+0

Если вы следите за изящной деградацией, вы не должны пытаться сообщить серверу, что JS доступен или нет. Он должен обрабатываться внутри страницы, и серверу не нужно заботиться. http://icant.co.uk/articles/pragmatic-progressive-enhancement/ - хорошее руководство. – Quentin

ответ

6

Ну, ответ для отображения страницы, как обычно со ссылками без Javascript. Затем запустите Javascript, чтобы заменить ссылки с версиями JS = 1.

var links = document.getElementsByTagName('a'); 
for (var i=0;i<links.length;i++) { 
    links[i].href += ";js=1"; 
} 
+1

+1 за то, что вы не дали свой ответ в jquery – tj111

1

Начните с ссылки, не поддерживающей Javascript, затем просто используйте Javascript-код, чтобы изменить ссылку на его Javascript-enabled. Это гарантирует, что ссылка всегда будет правильной версией. Например:

<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> 
+2

Пока они не нажимают ссылку до того, как загружаются огни – Greg

0

Если вы просто делаете одно звено, это должно быть достаточно:

<a href="script.cgi?a=action" onclick="this.href += ';js=1';"> 
+0

К сожалению, есть много таких ссылок –

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'; 
} 
0

На моем сайте я разрабатываю полностью не javascript-версию сайта. Я разрабатываю Django и передаю данные для страницы как переменные шаблона Django. Я создаю страницу в теге, а затем я JSONify переменных и визуализации javascript.

Например, вот шаблон Django для MapView на моем сайте:

{% 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> 

 Смежные вопросы

  • Нет связанных вопросов^_^