这对于 Javascript 专家来说应该很容易。
对于那些不知道什么是架构 ( http://schema.org ) 的人来说,这是搜索引擎读取网页内容的一种新方式。它通过使用特定标签标记相关数据来工作。
对于那些知道它是什么的人,这里有一个 chrome 扩展(模式资源管理器),它可以很容易地检查你的数据在页面上的样子。请参阅示例。
现在:扩展存在一个小问题,其中 by is 不会跳过/忽略空的嵌套元素。这里有两个例子:第一个完美运行,但第二个炸弹因为空<div>
标签:
第一个示例有效:
<div itemscope="" itemtype="http://schema.org/Movie">
<h1 itemprop="name">Avatar</h1>
<div itemprop="director" itemscope="" itemtype="http://schema.org/Person">
Director: <span itemprop="name">James Cameron</span> (born <span itemprop="birthDate">August 16, 1954</span>)
</div>
<span itemprop="genre">Science fiction</span>
<a href="http://pierreloicdoulcet.fr/movies/avatar-theatrical-trailer.html" itemprop="trailer">Trailer</a>
</div>
秒示例给出了问题:
<div itemscope="" itemtype="http://schema.org/Movie">
<div>
<h1 itemprop="name">Avatar</h1>
<div itemprop="director" itemscope="" itemtype="http://schema.org/Person">
Director: <span itemprop="name">James Cameron</span> (born <span itemprop="birthDate">August 16, 1954</span>)
</div>
<span itemprop="genre">Science fiction</span>
<a href="http://pierreloicdoulcet.fr/movies/avatar-theatrical-trailer.html" itemprop="trailer">Trailer</a>
</div>
</div>
我查看了扩展程序,实际上它与一个完成大部分工作的 javascript 文件很好地组合在一起。这是执行循环的代码,但是它需要能够跳过空的嵌套元素,并且通常可能更健壮一点:
var __explore = function(node, parentData)
{
if (parentData === null || parentData === undefined)
{
parentData = __dataTree;
}
if (node.getAttribute)
{
var isItemScope = node.getAttribute('itemscope');
var hasItemProp = node.getAttribute('itemprop');
var itemtype = node.getAttribute('itemtype');
var childs = node.childNodes;
var i = 0;
var tmp = new Array();
while (i < childs.length)
{
if (isItemScope !== null)
__explore(childs[i], tmp);
else
__explore(childs[i], null);
++i;
}
if (isItemScope !== null)
{
parentData.push({name : 'scope', value : hasItemProp, type : itemtype, childs : [tmp], node : node});
}
else if (hasItemProp && parentData)
{
parentData.push({name : hasItemProp, value : node.innerText});
}
}
}
这是contentscript.js
https://gist.github.com/3413475的完整版本
希望有人可以帮助我。作为记录,我已经联系了作者,但他一直忙于更紧急的事情。