Javascript 如何为网络爬虫和单页应用程序用户创建网站?
我会说得非常具体 我有一个前端。。。 (不是色情) 如果你有javascript,它会变成。。。[使用jquery/ajax加载进行渲染] 如果没有javascript,它仍然是。。。 然后单击底部的“隐私” 如果您有javascript,它会将文件/body/privacy.html加载到主div中,您会得到。。。 [使用jquery/ajax加载进行渲染] 如果你没有javascript,你只需要 ^我只是获取jquery/ajax插入到模板中的文件 这不是一个很好的解决方案。我想要一个永远不会进行完全刷新/重新加载,但每个主要搜索引擎都会对其进行完全索引的页面 是否可能发出如下命令:Javascript 如何为网络爬虫和单页应用程序用户创建网站?,javascript,html,ajax,search-engine,single-page-application,Javascript,Html,Ajax,Search Engine,Single Page Application,我会说得非常具体 我有一个前端。。。 (不是色情) 如果你有javascript,它会变成。。。[使用jquery/ajax加载进行渲染] 如果没有javascript,它仍然是。。。 然后单击底部的“隐私” 如果您有javascript,它会将文件/body/privacy.html加载到主div中,您会得到。。。 [使用jquery/ajax加载进行渲染] 如果你没有javascript,你只需要 ^我只是获取jquery/ajax插入到模板中的文件 这不是一个很好的解决方案。我想要一个永
For each link in page,
if ( user_has_javascript )
return page_with_javascript;
else
return serverside_render( page_with_javascript );
这样,任何没有javascript(包括网络爬虫)的用户都将获得页面的纯html/css版本。我计划在我的后端使用Ruby。有没有人对这个问题有一个干净的解决方案 好的。假设一个用户直接进入。。。然后他们单击一个链接,转到eroticahub.site/legal该链接如下所示:
<a href=eroticahub.site/legal.html onclick=function(){window.location.hash = 'legal.html';return false;}>
Link
</a>
因此,如果用户没有javascript,他们会转到eroticahub.site/legal.html并从服务器请求一个全新的页面,如果用户有javascript,他们会转到eroticahub.site#legal.html并不会从服务器请求一个全新的页面
#将触发一个hash change事件,该事件将调用一个包含(window.location.hash==“legal.html”)的大开关语句的函数。此条件将触发使用jquery/ajax将snippets/legal.html加载到网页中
如果链接指向eroticahub.site/legal.html,后端将提供与eroticahub.site/privacy.html相同的模板,但中间部分包含snippets/privacy.html中的单词
如果用户有javascript,则中间部分的呈现方式与用户没有javascript时相同。只有当用户单击一个链接时,才必须区分他们是否有javascript。AJAX必须在[替换]eroticahub.site/privacy的content div中的静态内容的基础上加载动态内容(#legal),然后在完全相同的div中用更多的html替换。必须保持约定,以便:
<a href=eroticahub.site/legal.html onclick=function(){window.location.hash = 'legal.html';return false;}>
Link
</a>
<a href=eroticahub.site/privacy.html onclick=function(){window.location.hash = 'privacy.html';return false;}>
Link
</a>
<a href=eroticahub.site/user_content/stories.html onclick=function(){window.location.hash = 'user_content/stories.html';return false;}>
Link
</a>
等等。首先让所有内容都使用常规URL,而不使用JavaScript。你希望你的JS是,所以把它建立在一个正常工作的、简单的HTML+服务器端解决方案之上 接下来编写JavaScript,从服务器获取所需的数据 并更新文档以匹配其他页面 该JavaScript应用于更改URL,以匹配您使用JavaScript在本地生成的服务器页面的URL 注意:
pushState
取代了hashbang URI。它是为您描述的用例设计的标准(而hashbang是一个标准)
将该JavaScript绑定到链接click/form submit/etc事件
为添加一个,这样当用户单击“上一步”时,您可以将页面恢复到以前的状态。您可以通过用户代理检测它是爬虫,还是在html中使用。因此,假设用户直接转到。它会有一个通用的站点模板,然后里面会有一个包含隐私主体模板的noscript。然后在底部有一个javascript,上面写着“If URL==privacy”,然后运行这个javascript,使用jquery/ajax加载privacy body语句。然后,如果用户单击链接转到“合法”。。。你不能重新加载通用网站模板,因为这会导致页面刷新。你不能根据爬虫用户代理生成不同的html,因为这听起来像是欺骗搜索引擎。那些东西太蠢了。假设一个用户直接进入。。。色情中心。网站/#隐私。搜索引擎了解URL参数,但通常会忽略片段,因此#隐私可能不会出现在搜索引擎列表中,因为它是一个片段。好的。假设一个用户直接进入。。。然后他们点击链接进入eroticahub.site/privacy。指向legal的链接将具有一个javascript函数,可以将用户带到eroticahub.site/legal#dynamic。如果动态存在,则将“合法”模板加载到主体中。如果没有,则必须有一个,后端必须将“合法”主体注入noscript。这样做的结果是,插入的snipper的ID和替换它的snipper的ID应该是相同的。因此,这样做,我应该将javascript排除在html之外,因为这将是“不引人注目的”。html中没有javascript[除了一个填充所有javascript的链接外],然后在pop状态下,我只会执行“history.back();”@MichaelLafayette-No.
history.back()
是如何让人们返回历史的。当用户选择返回历史记录时,将触发popstate事件。此时,您可以使用JS通过DOM manipulation.Oh将后页更改为以前的状态。因此,如果我只是使用pushState更改url以匹配服务器上的url,然后单击“上一步”,那么如果我不设置window.onpopstate,它将不会返回。只需像这样设置window.onpopstate。。。window.onpopstate=函数(事件){loadOldState()};其中loadOldState从事件中获取状态,并使用jquery/ajax从中的旧页面加载html。如何从事件对象获取旧URL并执行最后一部分?$(window).bind('popstate',function(event){var state=event.originalEvent.state;}。旧URL是否在此状态变量中?