我尝试在我的网站上实现 pushstate 历史记录,以便从 index.php 容器内的 single.php 页面加载内容。
我的网站有两个主页:index.php 和 single.php。
在 index.php 上有调用 pushstate 脚本的链接:
<a class="phplink" href="/Formlabs-3D-printer" title="Formlabs 3D printer">Post 12</a>
<a class="phplink" href="/Minimal-Bumper-for-iPhone-5" title="Minimal Bumper for iPhone 5">Post 11</a>
在我的 single.php 页面上,我使用 isset get 方法动态加载与 index.php 上单击的链接相对应的内容:
<?php
if (isset($_GET["page"])) {
//I do some stuff in order to echo content
?>
在我的 .htaccess 文件中,我重写了 url 链接(index.php 链接中的原因是干净的):
Options +FollowSymLinks
RewriteEngine on
RewriteRule /([a-zA-Z0-9\-]+)$ /index.php
RewriteRule /([a-zA-Z0-9\-]+)$ /single.php?page=$1 [L]
这里是我的 pushstate 脚本:
$.ajaxSetup({cache:false});
$(".phplink").click(function(){
var $post_link = $(this);
load_content($post_link.attr('title'),$post_link.attr('href'));
return false;
});
window.onpopstate = function(event) {
if (event.state) {
load_content(event.state.title, window.location.pathname, true);
} else {
var stateObj = {
title: document.title,
url: window.location.pathname,
};
url = window.location.pathname;
load_content(url,url);
}
}
function load_content(title,url,skipHistory) {
$.get(url,function (data) {
document.title = title;
var stateObj = {
title: title,
url: url
};
if (!skipHistory) {
if (typeof window.history.pushState == 'function') {
window.history.pushState(stateObj,title,url);
}
}
if(url.substring(1) != '') {
$("#ajaxify_container").html("loading...");
$("#ajaxify_container").load('single.php?page='+url.substring(1)+' #container-2');
}
else {
$("#ajaxify_container").html('');
}
});
}
我的 pushstate 脚本可以在链接点击(.phplink
点击时)上加载内容。它也适用于后退/前进按钮。
第一个问题:当我刷新浏览器(在 url 中有一个 pushstate 链接)时,它可以在 google chrome 上运行(将内容从 single.php 加载到 index.php 容器)但在 IE10 中没有(没有加载,它停留在 index.php页)。
第二个问题:如果我禁用 javascript 以查看 googlebot(对于 SEO)发生了什么。我无法加载/访问 single.php 页面,它总是停留在 index.php 上。所以single.php页面不能被搜索引擎抓取(我想,但我不确定)。这种行为是正常的,因为我在 .htaccess 文件中设置了“所有这些链接”将重定向到 index.php 。
我这样做是因为没有它 pushstate 在我刷新时会加载 single.php 页面。而且我不想要这种行为。我想在刷新它时将内容从 single.php 加载到 index.php 容器中。
所以我的主要问题(问题 2)是:我不知道如何在我的 php 页面中编写脚本或链接,以便在单击、刷新和后退/前进时将内容加载到我的 index.php 文件中。
在 pushstate 的正常行为中,在浏览器刷新时,onpopstate 是否可以将页面中的内容加载到另一个页面的容器中(将内容从 single.php 加载到 index.php 的容器中)?
我希望有人可以帮助我并解释它是如何工作的。我很难理解它如何与链接一起工作。
对不起我的英语,我是法国人...