【问题标题】:Change function with use of JavaScript function使用 JavaScript 函数更改函数
【发布时间】:2013-06-12 07:43:28
【问题描述】:

我有一个不属于我的网站。有很多 JavaScript 函数可以进行 ajax 调用。我想知道是否有可能修改这些函数,以便在成功的 ajax 请求后调用我的 JavaScript 函数。也许有可能注入另一个ajax查询结果代码的处理程序?

更新

也许我应该添加更多内容... 这个 ajax 调用是通过使用 xajax 库来实现的。我找到了这样一段代码:

<script type="text/javascript" charset="UTF-8">
/* <![CDATA[ */
try { if (undefined == xajax.config) xajax.config = {}; } catch (e) { xajax = {}; xajax.config = {}; };
xajax.config.requestURI = "xajax_loader.php";
xajax.config.statusMessages = false;
xajax.config.waitCursor = true;
xajax.config.version = "xajax 0.5 rc1";
xajax.config.legacy = false;
xajax.config.defaultMode = "asynchronous";
xajax.config.defaultMethod = "POST";
/* ]]> */
</script> 

我不知道 xajax 库,但也许有办法在配置中添加一些东西,以便成功后的请求调用 JavaScript 函数?

【问题讨论】:

  • 您的意思是,它们会为网站的每个用户执行?不是没有入侵服务器,不。
  • 不,不。只为我 - 没有黑客;)例如,我想注入代码,在每次 ajax 成功后播放声音或为了使其更简单 - 显示警报对话框。
  • 如果它只适合您,您可以考虑使用 chrome 扩展:stackoverflow.com/questions/8559482/…
  • 我希望它在 android 默认浏览器上运行,因此不能选择使用 (chrome) 扩展。
  • 实际上想要达到什么目标?内联替换站点代码相当复杂......

标签: javascript ajax xajax


【解决方案1】:

可以替换 javascript 函数定义。下面是一些简单的代码:

<script>
   function xyz() {alert('xyz');}
</script>
<body>
    <button onclick="xyz();">Run xyz</button>
    <button onclick="alert(xyz);">Show xyz</button>
    <button onclick="xyz=function(){alert('xxxxyz');};">Replace xyz</button>
</body>

我创建了一个小提琴http://jsfiddle.net/k565L/ 来尝试一下。 但是不知道是否可以替换跨站javascript函数。

【讨论】:

    【解决方案2】:

    源代码在这里:https://github.com/Xajax/Xajax/blob/master/xajax_js/xajax_core_uncompressed.js

    你可以考虑做这样的事情:

    xajax.origCompleteResponse = xajax.completeResponse;
    xajax.completeResponse = function(oRequest) {
        // Here you could do anything you want.
        // For example check the request object:
        console.log(oRequest);
        // And then return a call to the original function:
        return xajax.origCompleteResponse.apply(xajax.origCompleteResponse, arguments);
    };
    

    做同样事情的另一种方式:

    (function() {
        var super = xajax.completeResponse; // You can use any variable name you like.
        xajax.completeResponse = function(oRequest) {
            // Here you could do anything you want.
            // For example check the request object:
            console.log(oRequest);
            // And then return a call to the original function:
            return super.apply(super, arguments);
        };
    }());
    

    在此处查看定义:https://github.com/Xajax/Xajax/blob/master/xajax_js/xajax_core_uncompressed.js#L3666

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多