您对 jQuery 插件 LocalScroll 的引用是正确的。事实上,如果你能正确实施它,我认为它会解决你的问题。
在此插件、jQuery Mobile 和其他地方使用的基于锚的导航将更新window.location
对象并反映在浏览器的地址栏中,以便在发生显式页面刷新时保留散列位置。
那么,答案是有一个脚本可以从地址解析这个本地链接。这是一个通用的 JavaScript 代码块来演示这一点:
window.onload=function() {
var URLParts=window.location.toString().split('#');
if(URLParts.length>1)
var lastPage=decodeURI(URLParts[1]);
else
return false;
if(lastPage)
iframe_load(lastPage,'content');
}
function clear_last_page(location) {
var URLParts=location.split('#');
if(URLParts.length<=1)
return location;
URLParts.pop();
return URLParts.join('#');
}
function iframe_load(url,targetID) {
document.getElementById(targetID).src=url;
var location=clear_last_page(window.location.toString())+'#'+url;
window.location.href=location;
}
这个怎么运作
触发事件时window onLoad
,会在 URL 中搜索锚(散列)链接。如果找到,我们将假定这是对页面的引用,然后将其传递给iframe_load()
.
这个函数做了两件事。首先,它将您的目标内联框架指向通过url
参数传递的页面。其次,它将父框架指向一个虚构的锚点,即使在页面刷新后也会保留该锚点。
因此,当您刷新父框架时,该锚文本将被抓取、解析并用于重新加载最后加载的内联页面。
该函数clear_last_page()
只是一个帮助函数,可防止将其他锚链接附加到 URL。
示范
访问此网址:
http://gocontactform.com/stackoverflow/dynamically-change-iframes-content/
单击链接“第 2 页”以查看更改。然后刷新页面。
值得注意的
请注意,该解决方案在技术上接管了锚定的正常功能。因此,如果您尝试在页面上正常使用锚链接,您可能会得到不希望的结果。
您被迫依赖iframe_load()
绑定到该内联框架的任何链接,而不是您在问题中建模的内容(带有target
属性的传统链接)。
我可能还建议您不要定义src
内联默认属性。相反,您可以向onLoad
处理程序添加一个调用iframe_load('page1.html','content')
,这将防止在您使用地址中的锚定链接刷新时不必要地尝试加载默认页面。
还有其他方法可以完成您的要求。但我相信这个解决方案很容易理解和实施。
希望有帮助!