2012-07-15 122 views
4

所以,当我想要把网页上的一个谷歌+1按钮,我这样做:如何阅读<script>标签内的json内容?

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

但我想知道,有脚本标签的对象,但它也装载plusone.js!最后,脚本还可以获取标签内的对象。 Google如何做到这一点?通常情况下,我不会在里面放任何东西。通常情况下,我会做

<script type"text/javascript" src="script.js"></script> 
+3

他们将最后插入的脚本标记的字符串内容解析为json。 – Yoshi 2012-07-15 18:54:58

+5

由于太本地化而关闭?为什么? – 2012-07-15 18:58:40

+1

@Derek:我相信这是你发布的语气。你应该改写它来明确你想要做什么以及你尝试过什么,而不是问“Google”如何做,但你可以做到。 “Google如何做到这一点?”是一个可怕的问题标题。 – 2012-07-15 19:00:55

回答

7

由于URL是已知的,它很简单:

JSON.parse(
    document.querySelector("script[src='https://apis.google.com/js/plusone.js']") 
     .innerHTML.replace(/^\s+|\s+$/g,'') 
); 

这就是说,作为Alohci在评论中指出,页面上的最后一个脚本会最后一个脚本运行时加载,因为(除非另有指定)脚本被阻塞。因此,这将工作:

var scripts = document.getElementsByTagName('script'); 
var data = JSON.parse(scripts[scripts.length-1].innerHTML.replace(/^\s+|\s+$/g,'')); 
+0

我认为这也适用:'src =“// apis.google.com/js/plusone.js”' – 2012-07-15 19:06:21

+1

由于脚本在解析后立即运行,我相信一种常见的做法就是获取最后一个脚本元素,而不是依赖匹配src属性。 – Alohci 2012-07-15 19:08:25

+0

@Alohci好点,我忘了这一点。将编辑答案。 – 2012-07-15 19:13:02