首页 > 解决方案 > 在 document_end 填写表单时,我的脚本会单击一个按钮,该按钮会重新加载页面,以便再次运行。如何停止它运行?

问题描述

我正在编写一个小程序来使用脚本自动填充字段。

然后它提交表单。

但是,一旦提交表单,它就会重新加载页面并且脚本再次运行。

因此,它无限次地添加用户。

理想情况下,我想添加一个用户填写不同的信息,然后为最多 100 个用户添加下一个。

我不确定如何停止这个无限循环,我假设当页面重置时脚本也会重新启动。

我尝试放置一个运行我的脚本的函数,但是由于我的脚本在页面加载时运行,即使该函数处于 for 循环中,它也会不停地运行。

它也很难测试,因为无限循环是一个你无法真正摆脱的问题,除非它首先运行很多次。

我的清单代码如下:

{
    "name": "Begginer",
    "version": "1.0",
    "manifest_version": 2,
    "description": "Fill",

//    "permissions": [
//        "activeTab",
//        "*://*/*"
//    ],    

    "content_scripts": [
        {
        "matches": ["website"],
        "run_at": "document_end",   
        "js": ["Fill.js"]
        }
    ],

    "icons":
    {
    "16": "images/puppy16.png", 
    "48": "images/puppy48.png",
    "128": "images/puppy128.png"
    },

    "browser_action":
    {
    "default_icon": "images/puppy128.png"
    }

}

我的 JS:

    // define your username and password
    var Nam='Oi Macaco';
    var Gen='M';
    var Nbi='123';
    var Ser='Servico';
    var Dna='01-01-2000';
    var Dab='01-01-2000';
    var Cat='categorai';
    var Dis='Lunda';
    var Ema='email@domain.com';
    var Npa='123';
    var Una='OMacaco';

    // Finds Each Field
    var NameF   = document.getElementById('nome_new');
    var SexoF   = document.getElementById('sexo_new');
    var NbiF    = document.getElementById('num_bi');
    var SerF    = document.getElementById('servico');
    var DnfF    = document.getElementById('data_nasc_func');
    var DadF    = document.getElementById('data_admissao');
    var CatF    = document.getElementById('categoria');
    var DisF    = document.getElementById('distrito');
    var EmaF    = document.getElementById('email_new');
    var PasF    = document.getElementById('password_new');
    var UnaF    = document.getElementById('unamesso_new');

    // Fills the Fields
    NameF.value     = Nam;
    SexoF.value = Gen;
    NbiF.value  = Nbi;
    SerF.value  = Ser;
    DnfF.value  = Dna;
    DadF.value  = Dab;
    CatF.value  = Cat;
    DisF.value  = Dis;
    EmaF.value  = Ema;
    PasF.value  = Npa;
    UnaF.value  = Una;

    //Click Button
    document.getElementById('Button1').click();

一切正常,问题是它运行了无数次。

所以我假设我什至不能添加下一个用户。

一切都是假设,因为它很难测试无限循环,我并没有真正期待它。

我想我应该使用 chrome.browserAction.onClicked.addListener(function callback)

然后我应该为每个不同的用户制作一个开关。

但这似乎不是最好的方法。

帮助。谢谢。

标签: javascriptgoogle-chrome-extensionmanifestinfinite-loop

解决方案


我通过插入以下代码解决了它:

感谢丹哈珀,

显现

{
  "name": "Inject",
  "version": "0.0.1",
  "manifest_version": 2,
  "description": "Injecting stuff",

  "background": {
    "scripts": [
      "background.js"
    ],
    "persistent": true
  },
  "browser_action": {
    "default_title": "Inject!"
  },
  "permissions": [
    "activeTab"
  ]
}

注入.js

(function() {

    // define your username and password
    var Nam='Oi Macaco';
    var Gen='M';
    var Nbi='123';
    var Ser='Servico';
    var Dna='01-01-2000';
    var Dab='01-01-2000';
    var Cat='categorai';
    var Dis='Lunda';
    var Ema='email@somethin';
    var Npa='123';
    var Una='OMacaco';

    // Finds Each Field
    var NameF   = document.getElementById('nome_new');
    var SexoF   = document.getElementById('sexo_new');
    var NbiF    = document.getElementById('num_bi');
    var SerF    = document.getElementById('servico');
    var DnfF    = document.getElementById('data_nasc_func');
    var DadF    = document.getElementById('data_admissao');
    var CatF    = document.getElementById('categoria');
    var DisF    = document.getElementById('distrito');
    var EmaF    = document.getElementById('email_new');
    var PasF    = document.getElementById('password_new');
    var UnaF    = document.getElementById('unamesso_new');

    // Fills the Fields
    NameF.value     = Nam;
    SexoF.value = Gen;
    NbiF.value  = Nbi;
    SerF.value  = Ser;
    DnfF.value  = Dna;
    DadF.value  = Dab;
    CatF.value  = Cat;
    DisF.value  = Dis;
    EmaF.value  = Ema;
    PasF.value  = Npa;
    UnaF.value  = Una;

    //Click Button
    document.getElementById('Button1').click();

    alert('inserted self... giggity');

})();

背景代码:

// listen for our browserAction to be clicked
chrome.browserAction.onClicked.addListener(function (tab) {
    // for the current tab, inject the "inject.js" file & execute it
    chrome.tabs.executeScript(tab.ib, {
        file: 'inject.js'
    });
});

推荐阅读