Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Userscript可以在Opera中使用,但Firefox和Chrome提供;“未定义变量”;错误?_Javascript_Variables_Cross Browser_Userscripts - Fatal编程技术网

Javascript Userscript可以在Opera中使用,但Firefox和Chrome提供;“未定义变量”;错误?

Javascript Userscript可以在Opera中使用,但Firefox和Chrome提供;“未定义变量”;错误?,javascript,variables,cross-browser,userscripts,Javascript,Variables,Cross Browser,Userscripts,我正在创建一个用户脚本,在Opera中它像一个符咒一样工作,但在Fire Fox和Chrome中它给出了以下错误: 错误:未定义计算 我在脚本顶部有如下变量(用户可以在脚本中配置多个项目): var LoginFormat = true; var PunishCalc = true; var WorldList = true; var aWerelden = Array(); var TitleTickets = true; var Overvie

我正在创建一个用户脚本,在Opera中它像一个符咒一样工作,但在Fire Fox和Chrome中它给出了以下错误:

错误:未定义计算

我在脚本顶部有如下变量(用户可以在脚本中配置多个项目):

var LoginFormat     = true;
var PunishCalc      = true;
var WorldList       = true;
var aWerelden       = Array();
var TitleTickets    = true;
var OverviewLink    = true;
var CookieMarker    = true;
正如您所看到的,
pusticalc
实际上是在这里定义的

这是脚本最重要的部分:它在页面上实现jQuery

function addJQuery(callback) 
{
    var script = document.createElement("script");
    script.setAttribute("src", "http://code.jquery.com/jquery-1.7.2.min.js");
    script.addEventListener("load", function() 
    {
        var script = document.createElement("script");
        script.textContent = "(" + callback.toString() + ")();";
        document.body.appendChild(script);
    }, false);
    document.body.appendChild(script);
}

function main()
{
    // All the code will be in here
}

addJQuery(main);
这就引出了使用变量的一段代码:

else if(document.location.href.indexOf("village.php?mode=list") > -1 && PunishCalc === true)
{
    // Code here
}

正如您所看到的,它只是检查变量是否为真。这就是它所要做的。有人知道为什么它可以在Opera中使用,而不能在Chrome或Firefox中使用吗?

整个问题来自jQuery的加载方式

我们在页面中插入一个
标记,并添加一个侦听器,以便在加载脚本时运行某些内容。要运行的代码是
main.toString()
,它实际上是
main
的每个语句,但不是实际的函数

Firefox和Chrome中的用户脚本是沙盒的,页面上下文和脚本上下文完全不同。因此,当执行
main.toString()
语句时,您不再在userscript范围内,而是在当前页面范围内。这是因为插入的
在其上下文中执行代码:当前页面。由于在userscript范围内定义,此处未定义任何
pumplical


要绕过此限制,请将所有语句放入
main
函数中。

整个问题来自jQuery的加载方式

我们在页面中插入一个
标记,并添加一个侦听器,以便在加载脚本时运行某些内容。要运行的代码是
main.toString()
,它实际上是
main
的每个语句,但不是实际的函数

Firefox和Chrome中的用户脚本是沙盒的,页面上下文和脚本上下文完全不同。因此,当执行
main.toString()
语句时,您不再在userscript范围内,而是在当前页面范围内。这是因为插入的
在其上下文中执行代码:当前页面。由于在userscript范围内定义,此处未定义任何
pumplical


要绕过此限制,请将所有语句放入
main
函数中。

是否有指向完整脚本的链接?你能用一个简单的方法重现这个问题吗?你有完整脚本的链接吗?你能在一段时间内重现这个问题吗?谢谢,从我开始写这个脚本已经有一段时间了,所以我完全忘记了:S,从我开始写这个脚本已经有一段时间了,所以我完全忘记了:S