Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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 脚本在JSFIDLE中工作,但在Greasemonkey中不工作_Javascript_Jquery_Greasemonkey_Userscripts - Fatal编程技术网

Javascript 脚本在JSFIDLE中工作,但在Greasemonkey中不工作

Javascript 脚本在JSFIDLE中工作,但在Greasemonkey中不工作,javascript,jquery,greasemonkey,userscripts,Javascript,Jquery,Greasemonkey,Userscripts,我有一个油腻的剧本,在小提琴上很好用。它的设计目的是将输入字段中输入的文本大写。不幸的是,当我试图将它实现到Greasemonkey中时,它拒绝工作 有人能帮我吗?我刚到Greasemonkey 脚本(也位于: /==UserScript== //@name 2 //@包括* //@需要http://code.jquery.com/jquery-1.7.1.min.js //==/UserScript== $(文档).ready(函数(){ $.fn.capitalize=函数(){ $。每个(

我有一个油腻的剧本,在小提琴上很好用。它的设计目的是将输入字段中输入的文本大写。不幸的是,当我试图将它实现到Greasemonkey中时,它拒绝工作

有人能帮我吗?我刚到Greasemonkey

脚本(也位于:

/==UserScript==
//@name 2
//@包括*
//@需要http://code.jquery.com/jquery-1.7.1.min.js
//==/UserScript==
$(文档).ready(函数(){
$.fn.capitalize=函数(){
$。每个(此,函数(){
var split=此.value.split(“”);
对于(变量i=0,len=split.length;i
适合我。Firefox 10.0.2,Greasemonkey 0.9.18。我正在使用,它只是一个输入(没有库)来测试

尝试卸载然后重新安装脚本。

几件事:

  • 问题可能是安装冲突。来自该JSFIDLE的脚本名义上作为GM脚本工作

  • 从“管理用户脚本”面板中,卸载当前脚本和具有相同名称的任何其他脚本
  • 重启Firefox也是一个好主意
  • 将下面的代码保存为
    大写_Inputs.user.js
    ,然后将其作为Greasemonkey脚本安装。(调整
    包含
    排除
    匹配
    指令)。

  • 您不需要在此处或大多数GM脚本中使用
    $(document).ready()

  • 尽可能避免使用
    @include*
    。这样可以加快速度,减少潜在冲突

  • capitalize()
    函数可能更好。至少,替换:
    var split=this.value.split(“”);

    与:
    var split=this.value.split(//\s/);
    //或split(//\s+/)取决于是否需要多个空格


  • 生成的脚本如下所示:

    // ==UserScript==
    // @name     _Capitalize inputs
    // @include  http://YOUR_SITE/YOUR_PATH/*
    // @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
    // ==/UserScript==
    
    $.fn.capitalize = function () {
        $.each(this, function () {
            var split = this.value.split (/\s+/);
            for (var i = 0, len = split.length; i < len; i++) {
                split[i] = split[i].charAt(0).toUpperCase() + split[i].slice(1).toLowerCase();
            }
            this.value = split.join (' ');
        } );
        return this;
    };
    
    $('input').on ('keyup', function () {
        $(this).capitalize ();
    } ).capitalize();
    
    /==UserScript==
    //@name\u大写输入
    //@包括http://YOUR_SITE/YOUR_PATH/*
    //@需要http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
    //==/UserScript==
    $.fn.capitalize=函数(){
    $。每个(此,函数(){
    var split=this.value.split(/\s+/);
    对于(变量i=0,len=split.length;i
    这是一条评论,不是答案。(尚未标记。)@BrockAdams,我的回答是脚本没有问题。如果我没有实际测试,我会将其作为评论发布。我已经添加了关于重新安装的说明。如果OP表明他们已经重新测试,我也很高兴跟进。2和3是有效的。4是合理的,但它会更改字符串(除了大写)。但是,只有1.1可能与此问题有关。不需要更改名称或重新启动Firefox。在Firefox运行时,可以安装、卸载甚至更改已安装的脚本。@MatthewFlaschen:不,严格来说不需要更改名称,但很可能需要重新启动FF。名称为change只是一种被证明可以帮助新用户处理安装冲突的技术。重新启动有助于解决在对GM脚本进行大量实时编辑和调试时出现的其他冲突和不稳定行为。您还会注意到FF在调试GM脚本时会加速内存使用,并且FF变慢了。这两个都是重新启动的好理由。@MatthewFlaschen,你关于更改字符串的观点是正确的。我怀疑这是否是一个问题,但它很容易解决。编辑了答案。更重要的是,当单词前面有普通空格以外的任何内容时,旧代码完全不起作用。制表符、返回、不间断空格、unicode空格等都会导致它失败。
    // ==UserScript==
    // @name     _Capitalize inputs
    // @include  http://YOUR_SITE/YOUR_PATH/*
    // @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
    // ==/UserScript==
    
    $.fn.capitalize = function () {
        $.each(this, function () {
            var split = this.value.split (/\s+/);
            for (var i = 0, len = split.length; i < len; i++) {
                split[i] = split[i].charAt(0).toUpperCase() + split[i].slice(1).toLowerCase();
            }
            this.value = split.join (' ');
        } );
        return this;
    };
    
    $('input').on ('keyup', function () {
        $(this).capitalize ();
    } ).capitalize();