我正在使用下面的函数(GWT)动态创建HTML元标记。在DOM上花费1秒钟。除Facebook外,它工作正常。当我从我的网络共享链接时,刮刀获取HTML中的元标记:无。我该如何解决这个问题?
/**
* Include the HTML attributes: title, description and keywords (meta tags)
*/
private void createHTMLheader(MyClass thing) {
String title=thing.getTitle();
String description=thing.getDescription();
Document.get().setTitle(title);
MetaElement metaDesc = Document.get().createMetaElement();
metaDesc.setName("description");
metaDesc.setContent(description);
NodeList<Element> nodes = Document.get().getElementsByTagName("head");
nodes.getItem(0).appendChild(metaDesc);
}
这是DOM上的结果HEAD。标题 aaaa
和元描述已动态加载。 (感谢CBroe提示)。在“查看源”功能中,不显示这些动态标记(仅在开发人员工具上 - 查看dom)。
<head>
<title>aaaa</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type">
<meta name="description" content="My description">
<script language="javascript" type="text/javascript" src="dialective/dialective.nocache.js"></script><script defer="defer">dialective.onInjectionDone('dialective')</script>
</head>
原始HTML没有TITLE或META-DESCRIPTION标记。
答案 0 :(得分:13)
Facebook刮刀只能看到来自服务器的原始HTML响应中包含的<meta>
标签。运行任何JavaScript代码,Flash插件,Java小程序或其他任何可能运行的成熟浏览器都不够“足够聪明”。
您需要使用服务器端框架在服务器上生成这些<meta>
标记。
此外,Facebook提供了一个方便的testing tool,以确保您的页面公开适当的元标记。您可能还需要添加OpenGraph标记,例如og:title
和og:description
。
答案 1 :(得分:-1)
出于某种原因,元描述尚未加载上述函数...
那是因为你只是创建一个新的MetaElement - 但你 什么都没有。
您必须将追加到文档中,更具体地针对其head
元素。
像
这样的东西getHead().appendChild(metaDesc)
缺失。