Javascript 谷歌';s+;1按钮:他们是如何做到的?

Javascript 谷歌';s+;1按钮:他们是如何做到的?,javascript,html,google-plus-one,Javascript,Html,Google Plus One,在浏览Google的+1按钮时,我发现他们提供的代码有两个奇怪之处: <script type="text/javascript" src="https://apis.google.com/js/plusone.js"> {lang: 'en-GB'} </script> <g:plusone size="tall" href="http://www.google.com"></g:plusone> {lang:'en-GB'} 所以我

在浏览Google的+1按钮时,我发现他们提供的代码有两个奇怪之处:

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

<g:plusone size="tall" href="http://www.google.com"></g:plusone>

{lang:'en-GB'}
所以我有两个问题:
首先:谷歌如何使用
脚本
标记之间的文本?
Second:是语法

语法是否为

谷歌如何使用脚本标签之间的文本

元素在DOM中完全可见:

<script type="text/javascript">//FIRST SCRIPT BLOCK</script>

<script type="text/javascript">
    var s= document.getElementsByTagName('script')[0];
    alert(s.textContent); // "//FIRST SCRIPT BLOCK"
</script>
//第一个脚本块
var s=document.getElementsByTagName('script')[0];
警报(s.textContent);//“//第一个脚本块”
谷歌的诡计是将内容放在一个有外部
src
中。在这种情况下,
src
覆盖块内的内容并执行外部脚本,但是
元素的内容仍然可以通过DOM读取,即使它们什么都不做


语法是第一个有趣的技巧。将“全局”参数从页面标记传递到外部脚本似乎是一种创造性的方法。要找到源于当前正在运行的代码的
元素是很困难的,如果可以从DOM访问
元素的内部文本,即使浏览器忽略它,我也不会感到惊讶

在您的问题中,此模式允许每个外部客户端脚本使用(至少)自己的本地化设置,还允许服务器端代码渲染该参数,作为渲染
元素本身的副作用。真令人印象深刻

第二个把戏,我不太确定。基本上,我认为大多数浏览器会认为名称空间<代码> <代码>元素是未知的,甚至是无效的,因此它们应该呈现它的内容,但是它不会做任何事情,当然,因为元素是空的。
但是,客户端代码可能仍然能够使用DOM导航匹配带名称空间的元素,并将其替换为自己生成的内容。

它不是带名称空间的XML,因为从未指定
xmlns:g
。XML字符“:”是否未指定?首先“:”只是一个ASCII符号。我不确定谷歌是如何使用它的?这是一个类变量吗?@Quentin这当然有帮助,因为我在上找到了w3c文档,我不确定是否信任
var s=document.getElementsByTagName('script')[0]如果我们想要访问的脚本不是第一个
script
元素怎么办?是的,这只是一个例子。事实上,他们将要做的是读取ByTagName列表中的最后一个脚本,而不是第一个脚本。由于页面在运行时仅部分加载,最后一个
将是您当前正在执行的页面。(除非您使用
延迟
异步
)请确保它是。但这是一个困难的问题。