text ...">

ブラウザタブでのjavascriptプロトコルまたはランダムパスワード生成の機能

location.href = "javascript:document.body.textContent = '<div>text</div>';"
      
      





HTMLコードとして行を挿入します。



 <div>text</div>
      
      





次の形式のパスワードの生成:任意のサイトのXbD{'|<"]bFyWT49





XbD{'|<"]bFyWT49





ワンクリックでクリップボードに





エントリー



パスワードを作成するには、32〜126の範囲の任意のASCII文字を使用できます。 特殊文字を含む:「<」、「>」、「/」など

パスワードを生成するために、ブラウザーにブックマークを作成しました。このブックマークでは、ページへのリンクの代わりにJavaScriptプロトコルがURLで使用されました。



JSは、使用可能なASCII文字のセットから長さnのパスワードを生成し、document.body.textContentを使用して結果の文字列をドキュメントに挿入します。



URLブックマーク
javascript:for(var a=[],i=0;i<95;i++)a.push(String.fromCharCode(32 + i));for(var b="",i=0;i<16;i++)b+=a[Math.floor(Math.random()*95)];document.body.textContent = b;









より直感的なjs
 document.body.textContent = createPassword(); function createPassword() { var PASSWORD_LENGTH = 16; var random = Math.random; var allowedChars = getAllowedCharsArr(); for (var password = "", i = 0; i < PASSWORD_LENGTH; i++) { var randomIndex = Math.floor(random() * allowedChars.length); password += allowedChars[randomIndex] } return password; } function getAllowedCharsArr() { var FIRST_ALLOWED_ASCII_CHAR_INDEX = 32; var ALLOWED_CHARS_COUNT = 95; for (var allowedChars = [], i = 0; i < ALLOWED_CHARS_COUNT; i++) { var asciiCode = FIRST_ALLOWED_ASCII_CHAR_INDEX + i; var char = String.fromCharCode(asciiCode); allowedChars.push(char) } return allowedChars; }
      
      







エラー検出



ブックマークを少し使用した後、パスワードが完全に表示されない場合があることに気付きました。 すべての事前定義されたnの最初のk文字。 さらに、文字は「<」の後に表示されません。



つまり ブラウザコンソールまたはhtml scriptタグでコードを実行すると、javascriptは仕様に従って動作します。



 document.body.textContent = '<div>text</div>';
      
      





計画テキストとして行を挿入します。



<div>text</div>









ただし、javascriptプロトコルで同じコードが実行されると、html要素がドキュメントに表示されます(記事の冒頭に示されています)



理由



この動作はjavascriptプロトコルの典型的なものであり、textContentとはまったく関係ありません。

jsを実行すると、ブラウザは最後の式の結果をhtmlに挿入します。



 javascript:document.body.textContent = '<div>text</div>';
      
      





本文プレーンテキストに挿入し、

式は文字列を返し、

ブラウザはプロトコルの後に文字列を受け取ります

HTMLドキュメントとして認識されますが、

そして現在のページをテキストに置き換えます。



スクリプトの最後にvoid(0)を挿入することにより、この機能をバイパスできます

または正しい値(一部のブラウザーでは文字列、数値)を返さないその他の式



おわりに



テキストをDOMに貼り付けるのではなく、パスワードをクリップボードにすぐにコピーする方が便利になりました。



しおり
javascript:for(var a=[],i=0;i<95;i++)a.push(String.fromCharCode(32 + i));for(var b="",i=0;i<16;i++)b+=a[Math.floor(Math.random()*95)];var c=document.createElement('input');c.style.opacity=0;document.body.appendChild(c); c.value=b;c.style.position='fixed';c.style.zIndex=1000000;c.focus();c.select(); document.execCommand('Copy');c.remove();









ソース
 copyToClipBoard(createPassword()); function copyToClipBoard(str) { var input = document.createElement('textarea'); document.body.appendChild(input); input.value = str; input.style.position = 'fixed'; input.style.zIndex = 1000000; input.style.opacity = 0; input.focus(); input.select(); document.execCommand('Copy'); input.remove(); } function createPassword() { var PASSWORD_LENGTH = 16; var random = Math.random; var allowedChars = getAllowedCharsArr(); for (var password = "", i = 0; i < PASSWORD_LENGTH; i++) { var randomIndex = Math.floor(random() * allowedChars.length); password += allowedChars[randomIndex] } return password; } function getAllowedCharsArr() { var FIRST_ALLOWED_ASCII_CHAR_INDEX = 32; var ALLOWED_CHARS_COUNT = 95; for (var allowedChars = [], i = 0; i < ALLOWED_CHARS_COUNT; i++) { var asciiCode = FIRST_ALLOWED_ASCII_CHAR_INDEX + i; var char = String.fromCharCode(asciiCode); allowedChars.push(char) } return allowedChars; }
      
      







ループの代わりに、Array.mapを使用できます。 誰かがそれがよりエレガントであると信じ、誰かがそれが遅いことに気づく-これは好みの問題です。



代替案
javascript:var a = Array.apply(null, Array(127)).map(String.fromCharCode, String).slice(32);var b = Array.apply(null, Array(16)).map(() => a[Math.floor(Math.random() * 95)]).join("");var c = document.createElement('input');document.body.appendChild(c);c.value = b;c.style.position = 'fixed';c.style.zIndex = 1000000;c.style.opacity = 0;c.focus();c.select();document.execCommand('Copy');c.remove();









ブックマークの代わりに拡張機能を使用できます。たとえば、クロムも好みの問題です。



PS: mayorovp によるコメントの後に更新。彼に感謝します。記事は完全に編集されましたが、本質と主要な素材は同じままでした。



All Articles