2013-11-22 2 views
0

Привет, ребята, прежде чем публиковать это, я уже ушел и осмотрел многие места, пытаясь решить проблему, но не смог. This был самым близким, с которым я столкнулся.Ошибка обратного вызова jQuery() в IE

Я пытаюсь динамически создавать iframe и загружать содержимое в его src, а затем использовать обратный вызов, чтобы что-то сделать с ним. Как всегда, все работает в FF/Chrome, за исключением IE.

У меня есть что-то вроде этого:

var iframe = $('#helloworld'); 
if (!iframe.exists()) { 
    iframe = $('<iframe/>', { 
     id : 'helloworld', 
     src : "about:blank" 
    }).css({ 
     width : "100%", 
     height : "100%" 
    }); 
} 

...

iframe.load(options.src, function() { 
    div.append(this); 
    $(this).find('body').append(box); 
    box.dialog({ 
     close: function(event, ui) { 
      iframe.load("about:blank"); 
      div.hide(); 
     } 
    }); 
}); 

Подобно проблеме многих других людей, это не удалось на обратный вызов. Из того, что я читал в других сообщениях, это было связано с неправильным возвратом html в iframe, однако я уже проверил это, и мой html действителен.

Это то, что я возвращаю для своего iframe, как вы можете видеть, уже отключен до минимума для целей тестирования.

<!DOCTYPE html> 
<html dir="ltr"> 

    <head> 
     <title>Testing</title> 
     <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" /> 
     <style type="text/css"> 
     </style> 
    </head> 

    <body></body> 

</html> 

В IE, то JQuery умирает @ линия 5951:

append: function() { 
    return this.domManip(arguments, true, function(elem) { 
     if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { 
      this.appendChild(elem); 
     } 
    }); 
}, 

SCRIPT65535: Неожиданный вызов метода или доступа к свойству. JQuery-1.9.1.js, строка 5951 символов 5

Где this якобы быть моим iframe, и он не имеет appendChild метод.

Любой подсказку для дальнейшего устранения этой проблемы?

+0

Вы должны удалить это лишняя запятая: 'Src: "о: пустой",'. – leaf

+0

У меня есть что-то еще после этого, я удалил эти другие атрибуты, поскольку это не относится к этому вопросу. После этого я дал «allowtransparency: true». – codenamezero

+0

Я так вам сказал, потому что это уже случалось со мной очень часто, IE не любит лишние запятые:/ – leaf

ответ

0

Насколько мне известно, .load загружает HTML в указанный узел.

Так iframe.load(options.src, /* */);

загрузит значение options.src как тело HTML для фрейма. Я сомневаюсь, что вы этого хотите.

Я думаю, что вы хотите:

iframe.attr("src", options.src); 
// or 
iframe.attr("src", "about:blank"); 
+0

Я думаю '. load() 'выбирает данные данного URL-адреса. http://api.jquery.com/load/ – codenamezero

+0

Я не могу использовать 'attr()', потому что источник не полностью загружен, и мой следующий код не сработает. Мне нужно было дождаться загрузки содержимого, а затем сделать что-то для этого. – codenamezero

1

Вы не можете использовать нагрузки(), как, что с IFRAME. Если вы хотите узнать, когда содержимое загружается в iframe, используйте событие onload и установите атрибут src.

iframe.on("load", function() { 
    //code here 
}); 

iframe.attr("src", options.src); 

Вы получите обратный вызов при загрузке содержимого.

Теперь, чтобы использовать содержимое в IFRAME, вам нужно использовать contents()

iframe.contents().find("body")... 
Смежные вопросы