2015-05-06 4 views
0

Я пытаюсь добавить скрипт из другого файла javascript, я следил за этим сообщением о неблокирующем сценарии асинхронного ввода. http://calendar.perfplanet.com/2012/the-non-blocking-script-loader-pattern Мне удалось загрузить внешний скрипт, но я не могу для создания экземпляра объекта во втором JS-файла, вот код:Javascript Asynchronous Загрузка js-файла и создание объекта объекта

(function(url, callback){ 
     var dom,doc,where,iframe = document.createElement('iframe'); 
     iframe.src = "javascript:false"; 
     iframe.id = 'iframeTest'; 
     (iframe.frameElement || iframe).style.cssText = "border: 0px; z-  index: 50; position: fixed; height: 290px; width: 225px; right: 0px; bottom: 0px;"; 
     where = document.getElementsByTagName('script'); 
     where = where[where.length - 1]; 
     where.parentNode.insertBefore(iframe, where); 
     try { 
     doc = iframe.contentWindow.document; 
     } catch(e) { 
      dom = document.domain; 
      iframe.src="javascript:var d=document.open();d.domain='"+dom+"';void(0);"; 
      doc = iframe.contentWindow.document; 
     } 
     doc.open()._l = function() { 
      var head =     document.getElementById('iframeTest').contentWindow.document.getElementsByTagName('head')[0]; 
      var script = document.createElement('script'); 
      script.type = 'text/javascript'; 
      script.src = url; 
      script.onload = callback; 
      head.appendChild(script);   
     } 
     doc.write('<body onload="document._l();">'); 
     doc.close(); 
    }) 
    ('http://localhost/js/chat.js', function() { var cb = new Chatbox('6'); cb.init();}); 

И в chat.js файл, который я пытаюсь нагрузка:

 function Chatbox(orgId) 
     { 
     this.orgId = orgId; 
     } 
     Chatbox.prototype.constructor = Chatbox; 

     Chatbox.prototype.init = function() { 
      this.getStatus(); 
     }; 
     ..................................... 

при попытке загрузить страницу , Я в конечном итоге получаю сообщение об ошибке «Невстречу ReferenceError: Чатбокс не определен ». Я знаю, что здесь есть похожие вопросы, но не удалось найти решение для создания экземпляра объекта во втором файле, хотя оно работает, если оно не является асинхронным. Надеюсь, я ясно, и любая помощь будет высоко оценена. Заранее спасибо!

+0

Код кажется прекрасным для меня. Вам, вероятно, не нужен 'Chatbox.prototype.constructor = Chatbox;'; Но это все равно не поможет)). Позвольте мне взглянуть на это –

ответ

1

вы можете получить доступ к объектам iframe, если они находятся в одном домене. В противном случае вы не сможете.

document.getElementById('youriframe').contentWindow.cb 

вот как вы к нему подключаетесь. Вы всегда можете запустить код в самом iframe. Вы можете добавить его в свое текущее окно и получить к нему доступ также

+0

Kholov, Спасибо за ваше время! Поэтому я разрабатываю плагин для чата, например плагины чата, которые вы можете вставлять на свою веб-страницу, поэтому файл chat.js представляет собой довольно большой файл, и в идеале не будет хорошей практикой встраивать тысячи строк кода в body, поэтому я хочу загрузить второй файл с помощью другого файла и передать некоторые параметры во второй файл (вроде сценария Google Analytics), ваше решение действительно работает, но интересно, есть ли другой способ передать эти параметры из первого файла в второй файл и экземпляр. Еще раз спасибо за ваше время! – Uday

+0

А я понял. Извините, зачем вам загружать его динамически снова? @Uday –

+0

Kholov, Извините, возможно, я не очень хорошо объяснил это, поэтому скажем, что некоторые из моих клиентов будут использовать этот плагин, и каждый клиент имеет свою собственную идентификационную информацию, поэтому я хочу передать идентификационный номер в chat.js, чтобы инициировать чаты , поэтому я генерирую первый файл динамически (используя бэкэнд) с некоторыми параметрами и передавая их во второй скрипт. Он работает хорошо, если загрузка скрипта является «синхронизацией». – Uday

Смежные вопросы