Вы не можете обойти предупреждение о смешанном контенте в IE. Если удаленный ресурс доступен через HTTP и HTTPS, вы можете убедиться, что ваши протоколы совпадают jQuery.load(location.protocol + '//someurl.com .someClass')
Обновлено в зависимости от проблемы смешанного содержимого на удаленной странице:
jQuery.load
загружает весь текст ответа в фрагмент документа перед извлечением соответствующей части, указанной селектором (см. jQuery 1.4.4 ajax.js ). Вся удаленная страница анализируется как HTML и должна пройти через процессы безопасности браузера; во многих отношениях проще убедиться, что ответ «чистый», убедившись, что все протоколы совпадают, и / или возвращая фрагмент, только если это все, что вам нужно.
Если вы не будете изменять другой ресурс, который будет гораздо более надежным , вам придется заменить все вхождения HTTP на HTTPS (или наоборот), пока удаленный ресурс все еще работает просто строка Вот хрупкий плагин jQuery в качестве примера этой техники, в основном скопированный из функции jQuery 1.4.4 $ .load :
(function($){
var http = "http:",
https = "https:",
rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
proto = location.protocol,
otherProtoUri = new RegExp("\\b" + (proto === http ? https : http) + "(//[a-z\\d.-]+)", "gi");
$.fn.protocolModifyLoad = function(url, yesIKnowThisIsFragile, selector) {
var self = this;
if ( !this.length || !yesIKnowThisIsFragile) {
return this;
}
$.ajax({
url: url,
type: "GET",
dataType: "html",
complete: function( res, status ) {
// If successful, inject the HTML into all the matched elements
if ( status === "success" || status === "notmodified" ) {
// Force occurences of the other protocol into the current one
var response = res.responseText.replace(otherProtoUri, proto + "$1");
// See if a selector was specified
self.html( selector ?
// Create a dummy div to hold the results
jQuery("<div>")
// inject the contents of the document in, removing the scripts
// to avoid any 'Permission Denied' errors in IE
.append(response.replace(rscript, ""))
// Locate the specified elements
.find(selector) :
// If not, just inject the full result
response);
}
}
});
return this;
};
})(jQuery);
Использование: $('#your > .selector').protocolModifyLoad(location.protocol + '//someurl.com', 'thisIsFragile!!!', '.someClass');
Эта функция пропускает аргументы callback
и params
$.load
, а аргумент yesIKnowThisIsFragile
был добавлен в качестве тонкого напоминания.