2011-06-29 15 views
1

JSが正しく有効になっているかどうかを調べるために、さまざまなアプローチをとってきました。JavaScriptが有効になっているか正しく動作しているかどうかのテスト

通常、私はちょうどこのような何か:だから

$('.jstest').html('JavaScript works.'); 

<p class='jstest'></p> 

を、私は誤って無効JS、または私は構文エラーがあり、JSは、放火犯に相談することなく正常に実行されていないかどうかを確認することができます。

これで、1ページごとに変更する必要があります。 Greasemonkeyを使って、この問題はサイトに干渉することなく解決できると思いました。しかし、これまでのところ私は方法を見つけることができませんでした。私が試した:

  • はあっても、

どちらの方法がまだ動作し、リモート・サーバにSRCでスクリプトタグを挿入する開口部本体

  • 直後に挿入するサイト上のJSスクリプト/構文エラーのために実行されません。

    Greasemonkeyを使用してnoscriptコンテナを挿入し、jsを無効にして、Greasemonkeyが影響を受けていない間にサイトのJSが反応するかどうかを調べようとしました。いいえ、GMはJSなしでは動作しません:P

    GMはそのサイトの他のスクリプトとは独立して動作しているようです。誰もが解決策を知っていますか?

  • 答えて

    1

    GMが独自の特権サンドボックスで実行されるため、ターゲットページにJSが無効になっていても、Greasemonkeyは実行されます。

    JS関数を注入し、実際にその関数が実行されたかどうかを確認するためにGMを使用することで、JSがターゲットページで利用可能かどうかをテストできます。

    // ==UserScript== 
    // @name   _JS active test 
    // @include   http://stackoverflow.com/questions/* 
    // @include   http://www.nextdaypets.com/* 
    // ==/UserScript== 
    
    if (window.top != window.self) //-- Don't run on frames or iframes (normally). 
        return; 
    
    //--- This function will be injected to see if JS is active on the target page. 
    function TestPagesJS() { 
        var testNode  = document.createElement ("span"); 
        testNode.setAttribute ("style", "display: none;"); 
        testNode.setAttribute ('id', 'SpecialNodeToTestIfPageJS_IsActive'); 
        document.body.appendChild (testNode); 
    } 
    
    //--- Inject the test JS and try to run it. 
    var scriptNode   = document.createElement ("script"); 
    scriptNode.textContent = TestPagesJS.toString() + '\nTestPagesJS();'; 
    document.body.appendChild (scriptNode); 
    
    /*--- Do not call this function from within a timer. If you do, and the page's JS 
        is disabled (NoScript, etc.), the alerts will not fire. 
    */ 
    function CheckIsNodePresent() { 
        var testNode  = document.getElementById ("SpecialNodeToTestIfPageJS_IsActive"); 
        if (testNode) 
         alert ('Javascript works fine on the target page.'); 
        else 
         alert ('Oops! Javascript is off or broken on the target page.'); 
    } 
    
    CheckIsNodePresent(); 
    



    注2つの@includeディレクティブは、私が(アドオンNoScriptのを使用して)それぞれ、JSを許可し、許可しないサイトのためであること:ここでは

    はそれを実行するスクリプトです。 (スクリプトテストに合格します)

    +0

    うわー、それは素晴らしい解決策です。プラスフレームのチェックは素晴らしいです! – Chrisissorry

    +0

    喜んで喜んで、クリス。あなたの質問に答えましたか? –

    +0

    間違いありませんでした。これをjQueryに変換しようとしましたが、うまく動作しませんでした。どこかでjQueryがscript-tagsを正しく挿入できないことを読んでください... – Chrisissorry

    関連する問題