Google +1 объект конфигурации JavaScript - PullRequest
11 голосов
/ 29 июня 2011

Код для встраивания кнопки Google +1 может содержать объект javascript с настройкой (например, "{lang:'de'}").

В простом javascript этот объект будет создан и немедленно уничтожен, потому что на него ничего не ссылается.

Интересно, как скрипты Google получают доступ к этому объекту?

<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
  {lang: 'de'}
</script>

Кажется, это работает - за исключением случаев, когда вы динамически записываете тег сценария, включая объект конфигурации, в DOM.

Ответы [ 2 ]

7 голосов
/ 29 июня 2011

Поскольку источник в Google запутан, я не знаю, как они это делают.Как бы я это сделал, используйте JQuery, чтобы найти тег, а затем используйте .innerHTML, чтобы получить это как строку, а затем используйте JSON.parse для безопасного анализа объекта.

<script ...>
 {"lang" : "de"}
</script>
...
var data= JSON.parse(
    $('script[src="https://apis.google.com/js/plusone.js"]')[0].innerHTML)
alert(data.lang)
4 голосов
/ 01 июля 2011

Скрипт виджета запускается на document.scripts и ищет его со строкой "/js/plusone.js" в атрибуте scr.После этого обрежьте строку и создайте анонимную функцию.Результатом этого является объект со свойствами конфигурации.

if (Gb[u] > 0) {
    for (var Hb = "", Ib = 0; Ib < Gb[u]; Ib++) {
        var Jb = Gb[Ib][nb]("src");
        Jb && Jb[q]("/js/plusone.js") != -1 && (Hb = Q.d.rb(Gb[Ib]));
    }
    Hb = Hb[Ea](/^\s+|\s+$/g, "");
    Hb[q]("{") != 0 && (Hb = "{" + Hb + "}");
    try {
        var Kb = (new Function("return (" + Hb + "\n)"))(), Mb;
        for (Mb in Kb) i.__GOOGLEAPIS.gwidget[Mb] = Kb[Mb];
    } catch (Nb) {}
}
...