2012-03-01 16 views
0

フレームにないページをindex.htmlにリダイレクトしています。インデックスがindex.htmlに変更されていますか?page.htmlJavaScriptを使用してフレームを設定する

アドレスから追加の部分を使用し、フレームのSRCをこの値に設定します。

location.search.substring(1)を正しく含める方法がわからないため、エラーは発生しません。

各サイトには、コードを持っています

if (top.location == self.location) 
{ 
    top.location = 'index.html?' + location.href.replace(/^.*[\\\/]/, ''); 
} 

インデックスページは、私は私の前questionからこのアイデアを得た右

<frameset rows="100px,100%" cols="*" border="0"> 
    <frame src="logo.html" name="logo" scrolling="no"> 
    <frameset rows="*" cols="200,100%" border="0"> 
     <frame src="menu.html" name="menu" scrolling="no"> 
     <script language="javascript"> 
      if (location.search && location.search.length > 1 && location.search.charAt(0) == "?") 
      { 
       document.write('<frame src="' + location.search.substring(1) + '" name="page" scrolling="auto">'); 
      } 
      else 
      { 
       document.write('<frame src="main_page.html" name="page" scrolling="auto">'); 
      } 
     </script> 
    </frameset> 
</frameset> 

後に含まれています。

BTW。私もこれを行うべきですか?もっと良い解決策はありますか?

+0

'location'は、各フレーム(' window'-object)内のグローバルオブジェクトです。 'top.window.location'や' window.location'のように指定してください。 'location'自体は、既にリダイレクトされていなければ、hrefという名前のプロパティから見つかるページの現在のURLを表していません。 'href'はページのURLを変更するためにも使われます。 – Teemu

+0

@テムー、あなたが言っていることを見ているが、それをどのように機能させるかわからない。 – HelpNeeder

答えて

1

OK、これは簡単な例です。私はもっ​​と洗練されたソリューションがたくさんあると思いますが、この例にはタスクの基本的なものがすべて含まれています。偽のページは必要ありません。

これはローカルでのみテストされており、Chromeはフロントページにリダイレクトします。他のブラウザ(FF、IE、Opera)は期待どおりに動作します。

1)通常のフレームセットとしてあなたのindex.htmlを書き換え(つまり:なしdocument.write秒)

2)head

reDirectCleared=false; 

のindex.htmlの

3でこのスクリプトを入れて)このスクリプトを入れてくださいあなたのフロントページ

(function reDirect(){ 
    // ** Redirect if no frameset 
    if(top.window.location.pathname == self.window.location.pathname){ 
     top.window.location.href = 'Your_index.html_URL?This_page_URL&' 
    } 
    // ** Frameset exist 
    if(!top.window.reDirectCleared){ 
     top.window.reDirectCleared=true; // * Prevents further redirections 
     var searchString = top.window.location.search; 
     var pagePath = searchString.substring(1,searchString.indexOf('&')); 
     if(pagePath.indexOf(self.window.location.pathname)>-1 || pagePath==''){ 
      return; // * Ready at frontpage 
     } 
     top.window.page.location.href = pagePath; // * Redirects page-frame 
    } 
    return; 
})(); 

4)のheadではないインデックス内の他のすべてのページ(のheadでこのスクリプトを入れてください。html)

あなたの宿題は、実際のhttpページで失敗した場合、Chromeにこのようにする方法です。

+0

ああ、うわー!これは、必要な作業に最適です。どうもありがとう! – HelpNeeder

+0

あなたが言ったように、クロムはこの作品を作っていないようですが、firefox、すなわちオペラとサファリがうまくいきます。このスクリプトは、大部分のWebブラウザで動作するので、私はそれでいいです:) – HelpNeeder

2

フレームを使用する場合は、アイデアは大丈夫​​です。フレームに表示されるように意図された孤独なページは、他のフレームまたは上部から何かを必要とすることがよくあります。作業ソリューション:

1)スクリプトにはframesetタグが必要です。 page -frameにロードし、そこtop.windowのURLを取得するスクリプトを置くために偽のページを作成

if(top.window.location.pathname == self.window.location.pathname){ // Compares without search string 
    top.window.location.href = 'your_page_address+'?current_page_name' 
} 

3):

2)がページをリダイレクトします。その後、偽のページをユーザーが以前にあったページにリダイレクトします。元のページがindex.htmlの場合は、正しいページをロードしてください。 このスクリプトは-frameのドキュメントに置くこともできますが、リダイレクトする前にすべてのフレームが完全に読み込まれるまで待つ必要があります。

locationオブジェクトのプロパティから得られる結果は、ブラウザによって異なります。したがって、URLの文字比較と操作を避けるには、location - オブジェクトのプロパティのみを使用します。

+0

これがどのように行われたか教えていただけますか?私はjsで空白ですが、私は自分のページにフレームを使用しているので、このスクリプトが必要です。私の最初のスクリプトは、メインページにリダイレクトして、ページ名を 'index.html?about.html'のように追加するという素晴らしい仕事をしています。問題は、インデックスからアドレスバーからその情報を取得し、それをページフレームにロードする方法を知らないことです。何か案は? – HelpNeeder

関連する問題