アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下の記述
<script src="…">★</script>
で★の部分に「値」を書くことによって外部JSファイルに値を渡せるようです。がどう受け取るのかが判りません。

★に記述するのはあくまでも値です。「var a = "…";」等の式ではありません。具体的にはGoogle+の「+1 ボタン」の設置の際のコードで

<script src="https://apis.google.com/js/platform.js" async defer>
{lang: 'ja'}
</script>

のように記述します。こうすると「Google でおすすめする」となり、「{lang: 'en'}」とすると「Recommend this on Google」となります。(反映されたのはIE11。Chromeでは効かない)

なので少なくともIEではオブジェクトの受け渡しができているようです。

script要素でsrcを書くときにも閉じタグが必須である理由が今までわからなかったのですが、このためなのかなと今更ながらにカルチャーショックを受けました。

一応ググってみたのですが、グローバル領域に変数を定義してしまう方法や、クエリパラメータで指定する方法ばかりがヒットしてしまい、上記の方法に関する情報は見つけられませんでした。

https://apis.google.com/js/platform.js
を丁寧に読めば判るはずですが、コードが圧縮されていて非常に読みにくくなっており断念してしまいました。

<script src="…">★</script>
で★の部分に「値」を書いてそれを外部JSファイルで受け取る方法を教えてください。
よろしくお願いします。

A 回答 (2件)

こんにちは。


方法はNo1様が回答した通りと推測します。

ごく簡単な例を・・・
<test.js>
(function(){
 var s = document.getElementsByTagName("script");
 var obj = JSON.parse(s[s.length-1].innerHTML);

 var i, txt = "";
 for(i in obj)
  txt += i + " = " + obj[i] + "<br>";

 document.getElementById("result").innerHTML = txt;
})();


<html>
<!DOCTYPE HTML>
<html lang="ja">
<head><title>TEST</title></head>
<body>

<div id="result">result</div>

<script type="text/javascript" src="test.js">
{
"hoge": "hogehoge",
"fuga": 111,
"piyo": 222
}
</script>
</body>
</html>
    • good
    • 0
この回答へのお礼

ソースをきちんとは解析できていないのですが以下のあたりの

k.___gu=b}var b=Ub("cu"),e=q.scripts||q[pa]("script")||[],d=[],f=[];f[F][E](f,Ub("us"));for(var g=0;g<e[I];++g)for(var h=e[g],l=0;l<f[I];++l)h.src&&
0==h.src[H](f[l])&&d[F](h);0==d[I]&&0<e[I]&&e[e[I]-1].src&&d[F](e[e[I]-1]);for(e=0;e<d[I];++e)d[e][M]("gapi_processed")||(d[e][v]("gapi_processed",!0),(f=d[e])?(g=f.nodeType,f=3==g||4==g?f.nodeValue:f.textContent||f.innerText||f.innerHTML||""):f=void 0,(f=Yb(f))&&b[F](f));a&&(d={},Xb(d,a),c[F](d));

scripts, q[pa]("script"), src, innerText, innerHTML
等のキーワードから確かにそうっぽいですね。特に
q=document
pa="getElementsByTagName"
という定義があるので。

わざわざサンプルを作成していただき、ありがとうございました。Chromeでも動くことが確認できました。(でも、だとするとgoogle+ボタンの設置で、なぜChromeでは効かないのか謎ですが)

引数を渡す仕組みがあるのかと思っていたのですが、そうではなく独自にがんばっていただけということでちょっと拍子抜けしてしまいました。

しかし参考になりました。ありがとうございました

お礼日時:2014/10/21 15:38

DOMで、src属性のあるscriptタグの中身を順に見ているのだと思います。

    • good
    • 0
この回答へのお礼

なるほど。そういうことですか。
引数を渡せる仕組みが用意されているわけではないのですね。

ちょっと拍子抜けしてしまいました。
参考になりました。ありがとうございました

お礼日時:2014/10/21 15:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!