簡體   English   中英

在Internet Explorer中定義的XmlHttpRequest在哪里?

[英]Where's XmlHttpRequest defined in Internet Explorer?

我正在嘗試編寫IE BHO(從Chrome移植),我需要在XQuery中使用XSS。 我希望我可以通過替換jQuery函數$ .ajaxSettings.xhr來為我自己的插件/ JavaScript啟用XSS,

$.ajaxSettings.xhr = function() { return window.myExtension.Xhr() }

其中myExtension.Xhr是我的擴展中定義的COM函數(並且myExtension是通過((IExpando)window).addProperty)添加((IExpando)window).addProperty)

我嘗試將我的Xhr()函數定義為(C#實現COM),

public object Xhr()
{
    return new MSXML.XMLHTTPRequest();
}

但是當jQuery嘗試設置XHR的onload屬性時,這會失敗(在jquery-2.1.3.js:8617)。 所以看起來我使用了錯誤的COM XmlHttpRequest(MSXML2.XMLHttp也缺少onload)。 那么“真正的”XmlHttpRequest定義在哪里?

// Listen to events
xhr.onload = callback();
xhr.onerror = callback("error");

// Create the abort callback
callback = xhrCallbacks[ id ] = callback("abort");

我當然可以使用在.NET中提交GET / POST請求的幾種方法之一,但是當我進行XSS ajax調用時,我必須使用IE的變通方法弄臟我的代碼(因為Firefox和Chrome擴展可以使用XSS進行XSS適當的權限)。

我沒有找到一個真正的解決方案來解決我的問題,但是我最終想要做的一種解決方法是使用jQuery 1.x,它能夠(並且確實適用於IE6-8)使用舊的MSXML .XMLHTTPRequest。

我發布這個給任何想在他們通過BHO注入的腳本中運行跨域Ajax請求的人。

首先,定義此接口:

[ComVisible(true)]
[Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IExtension
{
    [DispId(1)]
    object Xhr();

    [DispId(2)]
    string OptionalFooBar();
}

並在某處實現它,例如在這種情況下我的BHO本身:

    //Exposed to JS
    public object Xhr()
    {
        return new MSXML2.XMLHTTP();
    }

一旦你的文檔完成,比如在OnDocumentComplete處理程序中,通過IDispatchEx向窗口添加一個屬性來公開你的方法:

    void OnDocumentComplete(object pDisp, ref object URL)
    {
        dynamic window = null;
        IExpando windowEx = null;
        try
        {
            if (pDisp != this.site)
                return;

            var document2 = browser.Document as IHTMLDocument2;
            var document3 = browser.Document as IHTMLDocument3;

            window = document2.parentWindow;
            windowEx = window as IExpando;
            windowEx.AddProperty("myExtension")
            window.myExtension = this;
      }

然后在你的JS中加載jQuery之后:

jQuery.ajaxSettings.xhr = function () { return window.myExtension.Xhr(); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM