Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为网络爬虫和单页应用程序用户创建网站?_Javascript_Html_Ajax_Search Engine_Single Page Application - Fatal编程技术网

Javascript 如何为网络爬虫和单页应用程序用户创建网站?

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插入到模板中的文件 这不是一个很好的解决方案。我想要一个永

我会说得非常具体

我有一个前端。。。 (不是色情)

如果你有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是否在此状态变量中?