【发布时间】:2013-08-20 07:56:48
【问题描述】:
我以前问过这个问题,但似乎我被误解了,因此我决定再问一次,但这次有很多信息:
对于懒惰的读者,我的目标是:
有没有办法通过 PHP 或 Ajax 检查是否在外部网站上启用了 javascript
详细说明:
好的,我的公司有很多客户,当这些客户在我们的网站上注册时,他们会收到一个javascript。然后他们可以在自己的网站上使用这个script 来获得一些额外的功能。
现在客户拥有的所有网站都存储在我们的 CMS 系统中(就像他们拥有与我们签署的所有网站的列表一样)。
现在我的老板给了我以下任务:
我们需要一个功能,以便用户可以按下“测试”按钮,系统将测试 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');
?>
【问题讨论】:
-
这可能更容易通过加载到客户端站点的代码来实现。 IE。当一个或多个函数发生错误时,让该代码对您的数据库执行 POST。
-
我能想到的唯一方法实际上是访问站点并检查控制台。或者让您的 js(您提供给客户端)通过 ajax 将错误消息发送到您服务器上的脚本
-
@class 我如何不手动检查站点的控制台?
-
@MarcRasmussen 据我所知,我认为你做不到。
-
或者您可以将 js 托管在您的服务器上,并检查 js 文件何时被访问以及由谁访问的日志,并实现一个错误函数以将错误发布到您服务器上的脚本中
标签: php javascript testing web phantomjs