我以前问过这个问题,但似乎我被误解了,因此我决定再问一次,但这次有很多信息:
对于懒惰的读者,我的目标是:
有没有办法通过 PHP 或 Ajax 检查是否在外部站点上启用了 javascript
详细说明:
好的,所以我的公司有很多客户,当这些客户在我们的网站上注册时,他们会收到一个javascript
. 然后他们可以script
在自己的网站上使用它来获得一些额外的功能。
现在,客户拥有的所有网站都存储在我们的 CMS 系统中(就像他们拥有与我们签署的所有网站的列表一样)。
现在我的老板给了我以下任务:
我们需要一个功能,以便用户可以按下“测试”按钮,系统将测试 javascript 是否在他们的网站上并且正常工作(即是否有另一个脚本阻止我们的)。
现在在过去的几天里,我一直在尝试在 Phantomjs 上找到类似的案例,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 运行它时,它没有任何输出,它只会一直运行:
测试.php
<?php echo shell_exec('phantomjs hello.js');
?>