如何覆盖从另一个脚本加载的变量参数

时间:2012-10-23 18:22:41

标签: javascript jquery

我有一个动态加载代码的脚本。它是一种搜索引擎。当我按下搜索按钮时,操作将被触发,并打开一个包含许多参数的新页面。

我想覆盖新网址中脚本生成的其中一个参数。 JS代码非常庞大且难以阅读,但我在Firebug DOM编辑器中找到了重要的部分。

这是执行搜索时生成的URL的模式:

http://www.example.com/...?ParameterOne=123&ParameterTwo=Two&ThisParameter=Sth&ParameterFour=Four...

我要编辑的是“ThisParameter”并更改其值。这是在DOM中编辑的部分,它可以满足我的需求:

Foobar = {
_options: [],
...
var options = {"ParameterOne":123,"ParameterTwo":"Two","ThisParameter":"ABC","ParameterFour":Four,...}
...

当您在Firebug的DOM选项卡中选择“复制路径”时,这是“ThisParameter”的输出:

_options[0].ThisParameter

我想知道这是可能的。是什么让我觉得它是,我可以在Firebug中更改此参数,它完美地运行。因此,如果Firebug可以编辑它,应该有办法用另一个脚本来影响它。

期待任何建议,提前谢谢!

3 个答案:

答案 0 :(得分:1)

由于您无法编辑动态脚本,因此您有以下选项:

  1. 您必须尝试为脚本提供正确的输入,并希望它使用您的值。
  2. 在结果页面中添加一个脚本,该页面将读取url和参数,更改它并重定向,如我们所讨论的here。 (如果将所有内容放在函数中,则如果函数具有唯一名称,则不应与动态脚本冲突。)
  3. 您可以尝试使用搜索按钮添加类似此jQuery代码的内容:

    $('input[name=search_button_name]').click(function(e) {
        e.preventDefault();
        var form_search = $('#search_form_id');
        $('<input>').attr({
            type: 'hidden',
            name: 'ThisParameter',
            value: 'SomethingElse'
         }).appendTo(form_search);
         f.submit();
    });
    

答案 1 :(得分:0)

您可以覆盖任何js函数和方法,或者围绕它包装代码。最简单的方法是查看您获得的代码,一旦加载,您就可以使用自己的功能重新声明一个方法。

我试图替换特定jquery请求中的参数,你甚至可以包装jquerys ajax方法:

var jquery_ajax = $.ajax
$.ajax = function(options){
    // parse only a specific occurence
    if(options.url.indexOf("example.com") > -1) {
           // change the url/params object - depending on where the parameter is
        options.params.ThisParameter = "My Custom value"
    }
    // call the original jquery ajax function
    jquery_ajax(options);
}

但是覆盖构建ajax请求的方法而不是ajax请求本身会更加清晰。

答案 2 :(得分:0)

我会进一步调查变量 options var options)的范围,它是全局的吗?即如果您在Firebug控制台中键入“选项”,它是否显示其属性?

如果是这样,您可以通过自己的脚本访问它,并且更改是值,例如

options.ThisParameter = 'my-own-value';

您可以将脚本挂钩到搜索按钮的点击事件。

我希望这会有所帮助,如果你在某个地方有一些示例代码可能更具体。