您好我在Windows文件系统中有一个没有网络服务器的网站。 现在我将重构旧导航并计划在单独的文件夹中仅使用一个导航文件。
在导航文件夹中,链接应设置为依赖于根文件夹的链接。根文件夹没有特定的名称,但在根文件夹中始终有一个start.html。
例如
c:\test\start.html is the root file
c:\test\foo\foo.html is another file
c:\test\bar\bar.html is another file
c:\test\bar\foobar\foobar.html is another file
所有这些文件都包含定义链接的navigation.js。
'text' : 'start',
'a_attr' : { 'href': 'start.html'}
'text' : 'foo',
'a_attr' : { 'href': 'foo/foo.html'},
'text' : 'bar',
'a_attr' : { 'href': 'bar/bar.html'},
'text' : 'foobar',
'a_attr' : { 'href': 'bar/foobar/foobar.html'},
当 start.html 中包含此导航时正常。所有链接都有正确的关系。
但是当我在foo.html中包含它时,链接的关系就错了。因为start.html不在foo文件夹中。
所以问题,是否有一种通用的方法来获取根文件夹并动态设置导航链接?
或者是否可以检查哪个文件夹深入引用当前文件的start.html?
All files in test has folder-deep 0
All files in foo has folder-deep 1
All files in bar has folder-deep 1
All files in foobar has folder-deep 2
我无法使用绝对链接,因此需要相对链接。 然后,当我使用绝对链接时,我无法将所有子文件夹的网站文件夹移动到另一个驱动器。
当我使用root-relative link \ start.html时,链接与驱动器相关,这也是错误的。
答案 0 :(得分:0)
好的我有一个可能的解决方案,但这项工作不正确的第一次调用页面,或通过crtl + f5重新加载
在根文件夹中,我放置一个带有特殊名称的行李,例如: start.png
现在我在navigation.js中调用一个函数来检查图像是否存在。
function UrlExists(url)
{
var img = new Image();
img.src = url;
if (img.height!= 0){
k = true;
}else{k = false}
return k;
}
function createUrl(x){
k = "";
while(x>0){
k += "../";
x=x-1;
}
return k;
}
var subFolderDeep = "";
x = 8;
while(x>0){
urlLen = createUrl(x);
if(UrlExists(urlLen + "start.png")){
subFolderDeep = urlLen;
break;
}
x=x-1;
}
alert(subFolderDeep);
startNavigation(subFolderDeep);
'text' : 'start',
'a_attr' : { 'href': subFolderDeep + 'start.html'}
'text' : 'foo',
'a_attr' : { 'href': subFolderDeep + 'foo/foo.html'},
'text' : 'bar',
'a_attr' : { 'href': subFolderDeep + 'bar/bar.html'},
'text' : 'foobar',
'a_attr' : { 'href': subFolderDeep + 'bar/foobar/foobar.html'},
但是在第一次启动时,subFolderDeep甚至是“”;当我刷新页面或当我使用navigationlink调用新页面时,我得到正确的subFolderDeep;
当我在第一次调用调试器时使用时,我也得到了正确的结果。
例如bar / foobar / foobar我得到subFolderDeep =“../../”,但是在第一次调用=“”时;
好了,我看到了问题。
在第一次通话时,图像的高度为0;通过刷新下一次调用,高度为24.问题出在哪里?
"file:///start.png" navigation.js:6:3
0 navigation.js:7:3
"file:///start.png" navigation.js:6:3
0 navigation.js:7:3
"file:///start.png" navigation.js:6:3
0 navigation.js:7:3
"file:///start.png" navigation.js:6:3
0 navigation.js:7:3
"file:///D:/start.png" navigation.js:6:3
0 navigation.js:7:3
"file:///D:/someFolder/start.png" navigation.js:6:3
0 navigation.js:7:3
**"file:///D:/someFolder/rootFolder-test/start.png" navigation.js:6:3
0 navigation.js:7:3**
"file:///D:/someFolder/rootFolder-test/k/start.png" navigation.js:6:3
0
"file:///start.png" navigation.js:6:3
0 navigation.js:7:3
"file:///start.png" navigation.js:6:3
0 navigation.js:7:3
"file:///start.png" navigation.js:6:3
0 navigation.js:7:3
"file:///start.png" navigation.js:6:3
0 navigation.js:7:3
"file:///D:/start.png" navigation.js:6:3
0 navigation.js:7:3
"file:///D:/someFolder/start.png" navigation.js:6:3
0 navigation.js:7:3
**"file:///D:/someFolder/rootFolder-test/start.png" navigation.js:6:3
24**
答案 1 :(得分:0)
好的,我已经解决了这个问题。
预加载时间是一个因素。
这是解决方案。
function preloadimages(subFolderDeep){
var arr=[];
arr.push(subFolderDeep + "7/e32l?.png");
var newimages=[], loadedimages=0
var arr=(typeof arr!="object")? [arr] : arr
for (var i=0; i<arr.length; i++){
newimages[i]=new Image()
newimages[i].src=arr[i];
i.src = arr[i];
newimages[i].onload=function(){
console.log(newimages[0].src);
console.log(i);
startNavigation(subFolderDeep);
}
newimages[i].onerror=function(){
console.log(newimages[0].src);
subFolderDeep = subFolderDeep + "../"
preloadimages(subFolderDeep);
}
}
}
//sample run
preloadimages("");
我正在根目录中搜索特殊的7 / e32l?.png。当图像可以加载时,我从活动文件到根目录有相对深的。这个相对深度必须包含在导航中,然后我可以为所有文件使用一个导航。