2015-05-06 2 views
2

Я играю с API-интерфейсом Google Диска и замечаю, что они вызывают функцию handleClientLoad функции client.js onload.вызов функции onload внешнего скрипта

<script src="https://apis.google.com/js/client.js?onload=handleClientLoad"></script> 

Пытаясь избежать создания глобал, я думал, что я хотел бы начать с созданием другого файла JS, который будет содержать шаблон модуля и возврат handleClientLoad.

var module = (function (window, $) { 

    'use strict'; 

    var module = { 
     handleClientLoad: function() { 
      console.log('ok, can access'); 
     } 
    }; 

    return module; 

}(window, jQuery)); 

И тогда я предположил, что я мог бы просто назвать handleClientLoad, делая module.handleClientLoad, но не кажется, что работает.

<script src="scripts/main.js"></script> 
    <script src="https://apis.google.com/js/client.js?onload=module.handleClientLoad"></script> 

Вопросы:

  1. Можно ли назвать module.handleClientLoad из OnLoad в client.js?

  2. Добавление onload и вызов функции из файла сценария кажется неаккуратным и навязчивым, нет? Есть ли более чистый способ узнать, когда загружен клиент.js?

ответ

1
  1. Вы пробовали отладчик, и вы уверены, что модуль. hanfleClientLoad существует в момент запуска обратного вызова?

  2. Вы можете опросить о существовании gapi.client как глобального объекта. Дайте ему несколько миллисекунд для инициализации перед вызовом его методов.

1

Я обнаружил, что jQuery.getScript() работал довольно хорошо для этого. Documentation here.

Вместо включая <script> тег на странице HTML, я просто включил следующую строку в моем файле JS:

jQuery.getScript("https://apis.google.com/js/api.js", handleClientLoad); 

Это может потребовать небольшое щипание за то, как вы структурированном свой модуль, но я думаю, что это быть проще, чем передавать параметр в свой тег <script> (по крайней мере, мне было проще).

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