以前にもこの質問をしたことがありますが、誤解されているようですので、もう一度質問することにしましたが、今回は多くの情報が含まれています。
怠惰な読者のために、ここでの私の目標は次のとおりです。
PHPまたはAjaxを介して外部サイトでjavascriptが有効になっているかどうかを確認する方法はありますか
詳細な説明:
さて、私の会社には多くのクライアントがいます。これらのクライアントが私たちのウェブサイトにサインアップすると、javascript
. その後、これscript
を自分の Web サイトで使用して、いくつかの追加機能を取得できます。
現在、クライアントが所有するすべての Web サイトは、当社の CMS システム内に保存されています (当社が署名しているすべての Web サイトのリストがあるように)。
今、上司は私に次の任務を与えました:
ユーザーが「テスト」ボタンを押すと、システムが JavaScript がサイト上にあり、エラーなしで動作しているかどうか (つまり、私たちのスクリプトをブロックしている別のスクリプトがあるかどうか) をテストする機能が必要です。
過去数日間、私はで同様のケースを見つけようとしてきましたweb
が、提案されたのはPhantomjsだけでしたが、私が達成したいことに近づく方法の例はありません.
だからあなたへの私の質問:
- サイトに特定の JavaScript が含まれているかどうかを確認することはできますか。
- javascriptがエラーなしで実行されているかどうかを確認することは可能ですか(コンソールがエラーをスローするかどうか)
今回は誤解されないように願っています :) ご不明な点がございましたら、メッセージを残してください。できるだけ早く対応いたします。
PhantomJs ソリューション (元々は Elias によって投稿されました)
これは私のコードです:
var page = require('webpage').create();
page.onConsoleMessage = function( message, line, srcId)
{//show console errors for page
console.log('Page has errors showing in console: ' + msg
+ ' (line: ' + (line || '?') + ', id: ' + srcId + ')');
};
page.open('http://www.marcrasmussen.com',function(status)
{
if (status != 'success')
{//can't load page
console.log('Failed to open page: ' + status);
phantom.exit();
return;
}
var reslt = page.evaluate(function()
{
var usesOurScript = false,
scripts = document.querySelectorAll('script');//get all script tags
Array.forEach.apply(scripts, [function(elem)
{//check all loaded scripts
if (/jquery\.js/.js.js.test(elem.getAttribute('src')))
{//this src attribute refers your script
usesOurScript = true;//set to true
}
}]);
return {page: location.href, found: usesOurScript};//return its href and the use-status
});
//script was found? adjust message
reslt.found = (reslt.found ? ' uses ' : ' does not use ') + 'our script!';
console.log(reslt.page + reslt.found);//logs url does not use || uses our script
phantom.exit();
});
そして、phpから実行すると、出力はありません。永久に実行され続けます。
Test.php
<?php echo shell_exec('phantomjs hello.js');
?>