WebサイトのすべてのユーザーがJavaScriptを有効にする必要がある場合、邪魔なJavaScriptを使用しても問題ないかと考えていました。
私はすべてプログレッシブ拡張に賛成ですが、古いブラウザまたはJavaScriptが無効になっている場合に、高度なWebアプリケーションがユーザーをドアで跳ね返すのはどういう意味ですか?
私たちは非常にスリムなターゲットユーザーを抱えており、必要なブラウザーとプラグイン/機能をターゲットユーザーに伝えることができます。だから私の質問は、その場合JSとHTMLを混ぜても大丈夫ですか? onclick属性を使用するようなものです。
これは設計上の決定ではなく、ビジネス上の決定です。
JavaScript(またはFlash、Silverlight)なしで機能するバージョンのWebサイトを提供するには、コストがかかります。 businessは、収益/訪問者の損失がそれだけの価値があるかどうかを判断する必要があります。
したがって、このバージョンを作成するのに10,000ドルかかる場合(数字は大きいかもしれませんが、この例にのみあります)、サイトの存続期間全体にかかる費用を回収しますか?そうでない場合は、そのバージョンを提供しないでください。
ただし、このバージョンを作成するのに100ドルしかかからない場合、優雅な低下を提供することは理にかなっています。
JavaScript対応のブラウザーのみをターゲットにして、ユーザーがJavaScriptを有効にすることを期待するというビジネス上の決定を下したので、現在利用可能な機能をアプリケーションで利用することは完全に理にかなっています。 (Stack Overflow自体と同様に)必要なことは、ユーザーがサイトを有効にしていないとサイトが正しく機能しないという警告が表示されることだけです。
まだ誰も育てていないもの…
Webサイトの99%は、JavaScriptをほとんどまたはまったく持たない特定の訪問者を歓迎します。その訪問者の名前はGooglebotです。
誰もが目の不自由な訪問者も気にする必要がある大きな理由…
あなたが検索エンジンのトラフィックをまったく気にしない非常に少数の1人である場合、まあ、それはあなたの特権です—しかし、それは確かに一般的なルールにはなりません。
特定の内部環境向けに物事を書く人々は、IE6がまだ存在する大きな理由です。
考えてみて
もしあなたがウェブサイトを構築しているなら、私はJavaScriptを邪魔にならないようにします。ただし、ある種のアプリケーション(Googleドキュメントなど)を構築している場合、JavaScriptは非常に邪魔になります。
JavaScriptとHTML5は、必要に応じてアプリケーションを構築するのに最適ですが、実際にはビジネス上の選択です。
JSのみのサイトを実行している場合(おそらく、この場合の「アプリケーション」がより優れたWordです)、JSのいわゆる「無邪気さ」は、ケースの場合ほど問題ではありません。 JSバージョン。
ただし:控えめな方法で記述されたJavaScriptは、一般的に記述が簡単で(少なくとも私はこの方法で見つけることができます)、維持することができます。 JSを壊さないHTMLレイアウトの変更、およびHTMLの壊しを心配することなくJSへの変更を導入する方が簡単です。
Onlick属性の使用について言及しました。ページナビゲーションにJavaScriptイベントハンドラーを使用する予定ですか?
私はこれに対して単一の理由でお勧めします:中央のクリックを壊します。
通常のリンククリックの場合、JavaScriptが有効になっていると仮定すると、これらは機能的に同等です。
<a href="#" onclick="window.location = 'myPage.htm';">Click here</a>
<a href="myPage.htm">Click here</a>
最初の例を中クリックすると、myPage.htmではなく空白のページが表示されます。
この例とは別に、ビジネスに意味がある場合は、邪魔なJavaScriptを使用しても問題ないと思います。インラインJavaScriptの記述にかかる時間は短くなりますが(必ずしも維持する必要はありません)、状況によっては、プログレッシブエンハンスメントの損失は重要ではない可能性があります。
邪魔なJavaScriptは10年前に大丈夫でした。あなたがアマチュアである場合、または使い捨てのプロトタイプを構築している場合、またはそれを必要とする状況(レガシーコードやデータ駆動型コードへの依存など)があり、コストがかかる方法であっても問題ありません。アルを修正するには多すぎる
ゼロから何かを構築する場合は、標準に従って、適切でクリーンで保守可能なコードを記述します。あなたが誇りに思う何かを書いてください。そうすれば、貧しいシュマックがあなたがしたハックジョブを理解していないために助けを求めてくる1年後、あなたが病気になることはありません。 Webデザイナが面倒なHTMLやJavaScriptを使用せずにCSSを簡単に交換できるようにするものを書きます。
成長する余地があるようにアプリケーションをビルドして、開発者が参加して保守できるようにします。現在投資されている時間は、将来の時間を節約します。あなたの時間ではないにしても、誰かの時間を節約できます。
JavaScriptが別のコンテキストで再利用できることを確認してください。完全なウェブサイトの再設計は、それだけであり、再設計であり、既存のものの完全な再構築ではなく、タフに構築されていないことを確認してください。
元々それを構築するのと同じ時間(== --- ==)を再設計に費やす必要があることはどれほど恥ずかしいことだと想像してください。
経験から私を信頼してください 控えめなJavaScript は、あなたがいくつかの高価な間違いをするのを防ぎます。
了解しました。私が行うすべてのネクロでクリプトキーパーと呼んでください。しかし、これの真の価値が適切に理解されているとは感じていません。歴史的には、「無邪気なJavaScript」、つまりファイルにリンクされていないインラインHTMLイベントハンドラー属性とスクリプトタグを介してJSをHTMLから除外することは、以下の重要な要素であると主張されています。
LIES!(まあ、今はそうなります)
問題の真実は、技術的に邪魔なJavaScriptを実行しても、上記の3つの項目を引き離すことができるということです。 HTMLコンテンツを動的に構築していない限り、これはその日の大きなSEO禁止事項でした。
しかし、立ち止まって考えてください...あなたについて!
実際、分離を維持することの大きな利点、最も大きく、最も売れ行きの悪い勝利は、常に、開発者がそれから得る直接的な利益でした。同じイベントの同じhtml要素で、必要なだけ多くのイベントハンドラーを使用できます。つまり、class="some_class"
を含むタグが常に特定の動作を取得し、id="bonus_behavior"
div内にあるときにボーナス動作も取得する場合、1つの許可されたイベントハンドラ内のロジックをいじる必要はありません。そのために分岐します。コンテキストに応じて、ハンドラーを追加することも、追加しないこともできます。
読みすぎる
別の利点は、読みやすさです。ブラウザツールが[object]
に問題があることを通知するIEの専用エラーメッセージで構成されている場合、これはより重大な問題でしたが、IMOは依然として大きな問題です。ここではCSS、JSはそこにあり、HTMLはそれらとサーバーの両方が出会う場所です。これらすべてが1か所に集まるため、フック(ID、クラス、および階層)に依存して、すべてがHTMLへの接続に使用する抽象化のレイヤーを作成することは理にかなっています。
IMO、HTML、CSS、およびJSを分離しておくことができるほど、読むだけでなく、何が起こっているのかを変更して理解することも簡単になります。 「dynamic_combo_box」をクラスとして持つ空のdivが表示され、データを動的に読み込む空の選択を行っていることを知っています。私はJSとCSSでそれを見つける方法についてリードを持っています。これらの懸念事項でクラスに出くわした場合、それが何であるか、そしてHTMLでそれを見つける方法について良い考えを持っています。
Sloppierを作るのも簡単すぎる
そしてもちろん、読みやすさは保守性と密接に関連している傾向があります。関連するHTMLが存在するスクリプトタグにすべてをダンプすることで直接処理を行うだけで、作業している別のページのHTMLにそのスクリプトをカットアンドペーストするだけで簡単になります。彼らは同様の機能を望んでいます。つまり、期待に反して動作が時間とともに問題となり、1つの必要な例外を処理するためにさらに無意味な分岐を追加する必要がある場合に、最終的に2つの厄介な類似物になる可能性があります。別の人はしませんでした。
そのため、これらのHTMLフックに動作をリギングすることで、コードをスマートに再利用できます。別の実装の動作を分岐する必要がある場合は、同じ関数に移動して、HTML階層で処理するか、データattで代替動作をトリガーします。これは、特定のタイプのUI要素がどのように機能するかを理解したいと考える誰にとっても1つのストップショッピングです。今すぐ実行してください。これが保守性を実現するための最良の方法です。パニックであろうと無関心であろうと、あまり気にならなかった人のために行うのも、最も簡単なことです。
しかし、2014年については?
現代の単一ページのアプリケーションでは、これらのステッカーのいくつかは、これまでのように独断的に動けなくなるべきではないかもしれませんが、私だけではないと私が思うのなら、私を信じてください。それは最終的に仕事を容易にするので、それでそれが売られました。私は(いいと思いますが)たいていは良い方法で怠けています。アプリ全体の変更を取得するために1か所のみを変更する必要がある場合、1か所のみを調べてバグを特定する必要がある場合、そして何が何であるかを簡単に理解できる場合に、私はそれが好きです続けて、そのコードを再利用して、非常によく似た何かを行う方法を説明します。
それは、DBやデータレイヤーを分割するのが良いようなものです。それは結局のところ、ボクサーの混血に10分を費やして翌朝の偏執的な匂いチェックを行うのではなく、前の晩に5分すべてかけて洗濯をするような時間節約である理由です。
私にとって、それは常に私が控えめなJSだけでなく、スタイル/動作/コンテンツの分離を保持する理由の主なポイントであった、わがままな動機であり、WHAT-freaking-WGが彼らの忌々しいことにさえ、可能な限りそれらの懸念を理解できるほど素晴らしく、クールで便利な方法で混乱させます。
誰もがSPAを実行していて、JSなしで実行している人々に注意を払う必要があることをビジネスに納得させようとしています(アクセシビリティは、おそらく、JS生成コンテンツで処理できるようになりました)。次世代のJS開発者はあまり気にしないようです。これについては、IMO、まだそこに勝利があります、そしてそれは主にあなた、開発者がこのようなものを書いて維持するためのものです。そして、本当に、その勝利は常に最も強調されたポイントであるはずでしたが、何らかの理由で決してそうではありませんでした。
これで大丈夫ですか?
ええ、そうですね。コンテストや何かのための使い捨ての使い捨てアプリで。しかし、私はそれを習慣にしていて、実際にそれを行うのが難しくないという理由だけで、それでもそれを行います。
大多数のユーザー(私のユーザー、私はあなたのユーザーについて知りません)は、JavaScriptを使用可能にして有効にしています。 thoseユーザーに優れたユーザーエクスペリエンスを提供しましょう。ただし、JavaScriptがなくても機能するバージョンのサイトを提供する必要があります。 2つのバージョンを構築するのは面倒なことだと思いますが、それがWeb開発でのやり方です。 (実際には、複数のバージョンを作成する必要があるかもしれません。3番目はサイトのモバイルバージョンかもしれません)。
あなたがしたくないのは、最も一般的な分母を設計することです。「まあ、JavaScriptを無効にしているユーザーもいるので、私たちのサイトを設計して、Javascriptがうまく機能しないようにします。 」これは、JavaScriptを使用しているユーザーの大多数に不利益をもたらすだけです。
ほとんどのレイアウトとナビゲーションをCSSで処理することを好みます。はい、 Lynx はサポートしていない可能性がありますが、私が認識しているすべてのフル機能のブラウザではオフにできません。次に、JavaScriptを使用して、より派手であるが必須ではないものを使用できます。また、Ruby on Railsこの目的のために必要です。サーバー側でJavaScriptが必要とする多くのことを行うことができます。動的なページ更新が必要です。
質問の回答をさらに対象とする:必要なJavaScriptは好きではありませんが、ChrisFが指摘したように、必要なビジネスケースがあります。
ターゲットの動作環境がわかっている場合、JavaScriptとjQueryのようなフレームワークは本当の天の恵みになる可能性があります。たとえば、SOEがJavascriptとIE8を備えているエンタープライズ環境では、集中的なクライアント側ブラウザアプリケーションを作成するのに安全ではありません。
一般に、匿名で利用可能で、検索エンジンによってインデックスが作成され、収益が広告によって生成される、従来の「Webサイト」を開発している場合は、適切な低下を提供する必要があります。この種のサイトはアクセシビリティによって存続し、死ぬので、アクセシビリティを制限すると、大量のページビューが失われ、広告収入が失われるという考えです。
制限されたアクセス、通常はインデックスに登録できず、広告収益ベースではない「サイト」(Webアプリケーション)は、はるかに柔軟です。それは、幅広いサポート、機能の深さ、および開発コストの間の決定に帰着します。従来のアプリケーションを開発するようなものだと考えてください。どのプラットフォームをサポートしていて、最低限の仕様は何ですか? 1つのプラットフォームと限られた仕様のみを対象とする場合は、潜在的な市場シェアを失うことを犠牲にして、開発とサポートのコストを抑えた優れた製品の提供に集中できます。
例:Google検索はWebサイトです。 Googleドキュメントはウェブアプリケーションです。 Google検索は飾り気がなく、JavaScript、CSS、画像などがなくても同じように機能します。最新のGUIブラウザと同様に、テキストモードのブラウザでも機能します。 Googleドキュメントは、JavaScriptが無効になっていると機能せず、正常に機能しません。JavaScriptを有効にするための警告もありません。
正常なデグラデーションを簡単にすることは、控えめなJavaScriptを魅力的な選択肢にする多くの要因の1つにすぎません。私の意見では、それは最も重要なものではありません。
個人的な経験から、時間の経過とともに大きく進化する可能性のある大きなプロジェクトについて話している場合、控えめなスタイルを使用すると、アプリケーションの保守、デバッグ、リファクタリングが簡単になります。これが、すべての訪問者に対してJavaScriptの有効化を要求するサイトであっても、常に目立たないスタイルを使用する最大の理由です。
JavaScriptは、クライアント側で配信されるあらゆる種類の動的コンテンツに関しては欠陥標準です。JSがない場合、おそらくSilverlightはありません。
次に、あなたはあなたの市場/聴衆について考えなければなりません、あなたはprogrammers.stackexchcangeまたはbbc.co.uk/newsですか?非常に異なる聴衆。
あなたはウェブを見回して多くのサイトで「邪魔なJavaScript」を見ることができるので、あなたの基本的な質問は答えられます、はい、それは大丈夫です、そして多くの人気のあるサイトはそれをします、Googleですら。
ただし、より重要なのは、ユーザーがJavascriptを有効にする必要があると主張したとしても、非JavaScriptユーザーに適切なレベルのエクスペリエンスを提供する必要があります。そうしないと、ユーザーは喜んで復帰しません。