Каковы правила междоменных запросов AJAX для динамического локального контента?

Если я использую элемент управления .NET WebBrowser и динамически заполняю содержимое HTML, JS, каковы именно правила для междоменных запросов AJAX? Я знаю, что технически у меня нет домена, поскольку это локальный контент, но я не уверен, как браузер справляется с этим.


person Newtang    schedule 08.05.2010    source источник


Ответы (2)


Прежде всего, убедитесь, что вы знаете, что делаете, и знаете о возможности XSS-атак, прежде чем делать это. Однако можно использовать междоменный AJAX с тегами <script> с некоторыми модификациями на стороне сервера, например, я использовал это:

var AjaxFunctId = 0
var DAjaxFuncts = {}
function CrossDomainAjax(URL, Query, Callback) {
    AjaxFunctId += 1
    var script = document.createElement('script')
    script.type = 'text/javascript'
    script.defer = true

    if (Query) Query = Query+'&'
    script.src = URL+'?'+Query+'Callback=DAjaxFuncts['+AjaxFunctId+']'
    var head = document.getElementsByTagName('head').item(0)
    head.appendChild(script)

    var Fn = DAjaxFuncts[AjaxFunctId] = function(Rtn) {
        Callback(Rtn)
        head.removeChild(script) // Clean up!
        delete DAjaxFuncts[Fn.id]
    }
    Fn.id = AjaxFunctId
}

e.g:

CrossDomainAjax('http://127.0.0.1/MyURL', 'myparam=myvalue&myparam2=myvalue2', MyFunction)

Параметр Callback в этой функции добавляет параметр Callback к запросу на локальный сервер, поэтому вам потребуется сервер для вывода:

CALLBACK ID(AJAX DATA)

Чтобы функция могла получить доступ к данным.

person cryo    schedule 09.05.2010

Я знаю, что технически у меня нет домена, так как это локальный контент, но я не уверен, как браузер обрабатывает это.
Тогда ваш «домен» будет «localhost», «0.0». .0.0», «127.0.0.1» или любой другой адрес, который вы ввели в браузере. Применяются те же правила, что и для любого «настоящего» домена: никаких запросов к другим доменам (за некоторыми незначительными исключениями).
Нет ничего специфичного для .NET, насколько я знаю.

person Nikita Rybak    schedule 09.05.2010