我采用了不同的方法来确定JS是否正确启用/运行。
通常我只是做这样的事情:
$('.jstest').html('JavaScript works.');
<p class='jstest'></p>
所以,我可以看到我是否不小心禁用了JS,或者我有语法错误而JS没有正确运行而没有咨询firebug。
现在,这需要我修改每一页。使用Greasemonkey我认为这个问题可以解决,而不会干扰网站。但到目前为止,我找不到办法。我试过了:
即使由于脚本/语法错误而未执行网站上的JS,这两种方式仍然有效。
现在,我尝试使用Greasemonkey插入一个noscript容器并禁用js,以确定在Greasemonkey不受影响的情况下,站点上的JS是否会作出反应。不,如果没有JS,GM就无法运作:P
似乎GM独立于该网站上的所有其他脚本运行。有人知道解决方案吗?
答案 0 :(得分:1)
Greasemonkey将运行,即使目标页面已禁用JS,因为GM在其自己的特权沙箱中运行。
您可以通过注入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 ();
请注意,两个@include
指令分别用于允许和禁止JS的站点(使用NoScript附加组件)。 (脚本测试通过。)