strophe.flxhr.js - 类型错误:this.func.prependArg 不是函数

Posted

技术标签:

【中文标题】strophe.flxhr.js - 类型错误:this.func.prependArg 不是函数【英文标题】:strophe.flxhr.js - TypeError: this.func.prependArg is not a function 【发布时间】:2015-11-08 10:51:42 【问题描述】:

strophe.flxhr.js

/* flXHR plugin
**
** This plugin implements cross-domain XmlHttpRequests via an invisible
** Flash plugin.
**
** In order for this to work, the BOSH service *must* serve a
** crossdomain.xml file that allows the client access.
**
** flXHR.js should be loaded before this plugin.
*/

Strophe.addConnectionPlugin('flxhr', 
    init: function () 
        // replace Strophe.Request._newXHR with new flXHR version
        // if flXHR is detected
        if (flensed && flensed.flXHR) 
            Strophe.Request.prototype._newXHR = function () 
                var xhr = new flensed.flXHR(
                    autoUpdatePlayer: true,
                    instancePooling: true,
                    noCacheHeader: false);
                xhr.onreadystatechange = this.func.prependArg(this);

                return xhr;
            ;
         else 
            Strophe.error("flXHR plugin loaded, but flXHR not found." +
                          "  Falling back to native XHR implementation.");
        
    
);

这是一本书提供的代码,我正在尝试从中学习使用 javascript 和 jQuery 进行 XMPP 编程。它还使用strophe.jsflXHR.jsstrophe.flxhr.js 用作主应用程序中的脚本文件。但是在我的 FireFox 浏览器中运行该应用程序时,Web 控制台给了我错误 TypeError: this.func.prependArg is not a function。我也在使用 WebStorm IDE,它显示 Unresolved function or method prependArg()。但根据这本书,这应该运行。我做错了什么?

请帮忙。谢谢。

【问题讨论】:

【参考方案1】:

显然,strophe.flxhr.js 文件存在错误。这是一个非常旧的版本(6 岁)。在 github here 中有一个新版本。 代码有细微的变化,这是有效的。 Web 控制台不会引发任何错误。这是新代码:

strophe.flxhr.js:

/* flXHR plugin
**
** This plugin implements cross-domain XmlHttpRequests via an invisible
** Flash plugin.
**
** In order for this to work, the BOSH service *must* serve a
** crossdomain.xml file that allows the client access.
**
** flXHR.js should be loaded before this plugin.
*/

Strophe.addConnectionPlugin('flxhr', 
    init: function (conn) 
        // replace Strophe.Request._newXHR with new flXHR version
        // if flXHR is detected
        if (flensed && flensed.flXHR) 
            Strophe.Request.prototype._newXHR = function () 
                var xhr = new flensed.flXHR(
                    autoUpdatePlayer: true,
                    instancePooling: true,
                    noCacheHeader: false,
                    onerror: function () 
                        conn._changeConnectStatus(Strophe.Status.CONNFAIL,
                                                  "flXHR connection error");
                        conn._onDisconnectTimeout();
                    );
                xhr.onreadystatechange = this.func.bind(null, this);

                return xhr;
            ;
         else 
            Strophe.error("flXHR plugin loaded, but flXHR not found." +
                          "  Falling back to native XHR implementation.");
        
    
);

编辑: 来自此脚本的开发者Jack Moffitt: “这段代码不再有效。strophe.flxhr.js 只是让一些测试更容易,因为它通过使用 Flash 放宽了 CORS 要求。现在大多数东西都原生支持 CORS,所以无论如何可能都不需要它。它不提供任何 API或示例代码所需的任何东西;它纯粹是 XMLHttpRequest 的替代实现。如果您可以使较新的版本工作,然后使用它。“。 Here 是对话。

【讨论】:

以上是关于strophe.flxhr.js - 类型错误:this.func.prependArg 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

高阶函数参数类型的错误类型推断

模板 <class T>:错误:“T”没有命名类型

未捕获的类型错误:t.rgb 不是函数

qvector.h(74) : 错误 C2182: 't' : 非法使用类型 'void'

JWT 库错误:通用类型“ModuleWithProviders<T>”需要 Angular 10 中的 1 个类型参数

类型未声明错误