4

所以我最近决定开始学习 JavaScript。我来自只知道 VB.NET 的编程知识和 HTML 和 CSS 的设计。无论如何,scrap.tf 是一个用于 TF2 银行业务的网站,它使事情变得自动化。我打算写一个基本的 Chrome 插件,我希望如果点击按钮,这个功能就会发生。我已经把这一切都设置好了,但是当按钮被点击时,我只需要 scrap.tf/hats, EnQueueHatBank(); 是他们在那里用来加入队列的 JS 命令。除非我在网站上输入它,否则它甚至永远不会触发。我需要等待它开火吗?

if (location.href === 'http://scrap.tf/hats')
{
    EnQueueHatBank();
}
else
{
    window.location.href='http://scrap.tf/hats';
    EnQueueHatBank();
}
4

3 回答 3

3

您需要更正比较以使用两个等号。

if (location.href == 'http://www.scrap.tf/hats')
{
    EnQueueHatBank();
}

一旦你最终使用了 jslint 之类的工具,javascript 甚至提供了一个===运算符,它也会进行类型检查(检查双方是否都是字符串,如本例所示)。

于 2013-07-12T19:44:45.170 回答
2

我认为这个关于=vs==的讨论没有抓住重点。您在调用window.location 之前EnQueueHatBank进行了更改,因此您在调用该函数之前导航到一个新页面。这就是阻止它运行的原因。所以你需要做的第一件事是:

  1. 首先调用 EnQueueHatBank。

    if (location.href === 'http://www.scrap.tf/hats') {
        EnQueueHatBank();
    } else {
        EnQueueHatBank();
        window.location.href='http://www.scrap.tf/hats';
    }
    
  2. 稍微清理一下代码,因为结构有点别扭。您正在调用EnQueueHatBank任何一种方式,因此不需要在 if 语句中:

    EnQueueHatBank();
    
    if (window.location.href !== 'http://www.scrap.tf/hats') {
        window.location.href = 'http://www.scrap.tf/hats';
    }
    
  3. 最后,请记住,http://www.scrap.tf/hats/可能与 去同一个地方http://www.scrap.tf/hats,更不用说https://www.scrap.tf/hats?foo=bar等等。最好使用不那么严格的测试:

    EnQueueHatBank();
    
    if (window.location.href.indexOf('://www.scrap.tf/hats') > -1) {
        window.location.href = 'http://www.scrap.tf/hats';
    }
    

编辑:根据您的评论,您需要这样做:

if (window.location.href.indexOf('://www.scrap.tf/hats') > -1) {
    EnQueueHatBank();
} 
else {
    window.location.href = 'http://www.scrap.tf/hats';
}

这仅在您的程序在导航到 后再次运行时才有效scrap.tf/hats,因此请确保每次加载新页面时它都会运行。

出于安全原因,您不能在一个页面上启动代码并在您导航到其他地方后让它继续。您必须EnQueueHatBank从要运行的页面调用。

于 2013-07-12T19:51:26.823 回答
1

你应该使用比较===操作,但是你做了一个赋值=

if (location.href === 'http://www.scrap.tf/hats')
{
    EnQueueHatBank();
}
else
{
    window.location.href='http://www.scrap.tf/hats';
    EnQueueHatBank();
}
于 2013-07-12T19:46:14.503 回答