文件系统中的动态网站导航(所有页面的一个文件) - 没有网络服务器

时间:2015-07-02 06:57:07

标签: javascript jquery html

您好我在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时,链接与驱动器相关,这也是错误的。

2 个答案:

答案 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。当图像可以加载时,我从活动文件到根目录有相对深的。这个相对深度必须包含在导航中,然后我可以为所有文件使用一个导航。