下記の環境があります。
本番環境
http://aaa.com/
テスト環境
http://bbb.com/
ページ内のリンクでhttpsを使うところがあり、
相対パスでリンクを書くことが出来ません。
なのでテスト環境のHTMLにはhttps://bbb.com/という
リンクを書くのですが、これだと本番環境に
HTMLを持っていったときに使えないため
書き換えなければなりません。
aaaの部分を何か共通のファイルで持たせるなりして
本番環境でもテスト環境でも同じHTMLファイルを
使いたいのですがよい方法はありませんでしょうか?
aspやjsp等を使うことは出来ません。
JavaScriptは使えます。
SSIは使えます。
No.1
- 回答日時:
こんな感じでどうでしょう?
アイデアとしては、置き換えるURL名を、変数でlink.jsファイルで持ちこれの中身を本番環境とテスト環境で変えます。
link.js
--------
var ChangeLink="http://aaa.com/";
--------
var ChangeLink="https://bbb.com/";
--------
<html>
<head>
<title>TITLE</title>
<script src="link.js"></script>
<script type="text/javascript">
<!--
function SetLink(){
var AObj=document.links;
for(i=0;i<AObj.length;i++){
if(AObj(i).className=="change"){
AObj(i).href=ChangeLink;
}
}
}
//-->
</script>
</head>
<body onload="SetLink()">
<a class="change" href="#">リンク1</a>
<a class="change" href="#">リンク2</a>
<a class="change" href="#">リンク3</a>
</body>
</html>
この回答への補足
早速のご回答ありがとうございます。
リンク1、リンク2、リンク3の値を変えたい場合は
forループの中でChangeLinkに値を加えるという
感じでしょうか?
HTMLをいじる担当者があまりJavaScript等に
詳しくないため、出来るだけ通常のHTMLを書くのと
同様に記述できればと考えております。
SSIで
<a href="<!--#include file=hoge.shtml-->/aaa.html">
のように書ければベストかと思っていたのですが
こんな書き方は出来ないようです。。
No.2
- 回答日時:
>リンク1、リンク2、リンク3の値を変えたい場合は…
2種類のリンクを変更するだけじゃないのですか?
サンプルは、classがchangeのものだけを置き換えます。
普通のリンクはそのままです。
サンプルでは、リンクが3つ連続していますが、実際は点在しているのだろうということです。
この回答への補足
説明不足で申し訳ございません。
下記のようにリンクを貼りたく思っています。
テスト環境
リンク1:https://bbb.com/a.asp?a=1
リンク2:https://bbb.com/a.asp?a=2
本番環境
リンク1:https://aaa.com/a.asp?a=1
リンク2:https://aaa.com/a.asp?a=2
お教えいただいた方法だと
同じURLにリンクを貼りたい場合は簡単だと思いますが
リンク先が異なるときの指定方法が
少し煩雑になってしまうかなと思いました。
No.3
- 回答日時:
普通にHTMLを書いて、本番環境に移行する際に置換ソフトを使う……という方法ではだめでしょうか?
フォルダ内のファイルにある文字列をまとめて置換してくれるソフトはフリーでいろいろとあります。
私が愛用しているのはTextSSというソフトです。
http://www.vector.co.jp/vpack/browse/pickup/pw5/ …
このようなソフトで、
http://bbb.com → http://aaa.com
https://bbb.com → https://aaa.com
と置換動作を指定してやれば、ものの5分程度で全ての記述が書き換わります。
いかがでしょう。
この回答への補足
ご回答ありがとうございます。
確かにやりたいことはこのようなことなのですが
担当者が作業を忘れる恐れがあるため
出来るだけ単純なやり方にしたいと考えております。
テスト環境で確認したファイルを
そのまま本番環境に持っていけるのがベストだと
思っています。
<a href="JavaScript:location.href='https://' + location.hostname + '/a.asp?a=1'">リンク</a>
上記のようにリンクを貼れば一応やりたいことは
出来るのですが、あまりキレイじゃないなと
思っており他によい方法がないかと
思っているところです。
No.4
- 回答日時:
ホスト名だけを置き換えるように変更してみました。
location.hostnameやlocation.hostは、取得できない場合があるので前回と同様外部スクリプトファイルで変数定義する様にしました。
各リンクにはホスト名を置き換える標として%HOSTNAME%をホスト名として記入するルールにします。
hostname.js
-----------
var hostname="aaa";
-------------------
var hostname="bbb";
-------------------
<script src="hostname.js"></script>
<script type="text/javascript">
<!--
//var hostname=aaa; //外部定義: aaa または bbb
function SetLink(){
var AObj=document.links;
for(i=0;i<AObj.length;i++){
if(AObj(i).className=="change"){
alert(AObj(i).href);
AObj(i).href=(AObj(i).href).replace(/%HOSTNAME%/i,hostname);
}
}
}
//-->
</script>
<body onload="SetLink()">
<a class="change" href="https://%HOSTNAME%.com/a.asp?a=1">リンク1</a>
<a class="change" href="https://%HOSTNAME%.com/a.asp?a=2">リンク2</a>
この回答への補足
ありがとうございます!
IE6で確認してみたところはよさそうでした。
Netscape6.2で確認したところ
うまく動きませんでした。
やはりJavaScriptを使うと環境に依存してしまうのでしょうか。。
ところで
if(AObj(i).className=="change")
の判定は%HOSTNAME%という文字列を
他で使っていなかったら不要でしょうか?
No.5
- 回答日時:
>if(AObj(i).className=="change")
そうですね。
普通、%名前%とか使わないので、
クラス名で確認する必要は特に無くなりました。
要りません。
alertも要りませんね。
>Netscape6.2で確認したところ
すみません、NNは、確認していません。
classNameをやめて
AObj(i)をAObj[i]に変えると良いかも知れません。
replaceがjavascript1.2の機能なので、
そこら辺も関係あるかもしれません。
NN7.1だと動くかもしれません。
NNで、alert(AObj[i].href)が表示される(アクセスできる)なら、replaceだけが問題だと思うので
replaceをsubstringやindexOfを使う形(低レベルなもの)に置き換えるといいかもしれません。
当方6.2は、手元にないのですが、ちょっと別の書き方も考えてみます。
NNのスクリプトコマンドプロンプト(だっけ?)でどこでエラーになるか教えてくれますか?
>JavaScriptを使うと環境に依存
ブラウザに依存する部分とかjavascriptのバージョンとかも依存する部分があるのは、ある程度はしょうがないと思います。
ちゃんとした規格があって、どのブラウザもそれを厳格に守っている(バージョンアップしているとかも含めて)のなら問題ないのでしょうけど。
No.6ベストアンサー
- 回答日時:
NN6.2で確認してみました。
function SetLink(){
var AObj=document.links;
for(i=0;i<AObj.length;i++){
AObj[i].href=(AObj[i].href).replace(/%HOSTNAME%/i,hostname);
}
}
の様にしてみて下さい。
やはり、AObj(i)→AObj[i]にしたら動きました。
普段IEしか使っていないので気づきませんでした。
考えてみたら、この書き方が正統ですね。
すみませんm(_ _)m
うまく出来ました!
ありがとうございました!
なお、SSIも
<a href="http://<!--#echo var="HTTP_HOST"-->/a.asp?a=1">
でうまくいきました。
WEBサーバがSSIを使う設定になっていなかっただけでした。。
ただ、SSIだとサーバに負荷がかかるので
どれも一長一短かなと思っています。
テキスト置換の方法も含め、検討したいと思います。
ご丁寧に回答いただきありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ニュース・時事問題) マイナンバーカードの批判 25 2023/06/30 21:30
- フリーソフト テキストエディア oedit の環境設定(初期設定)ファイルはどこ? 1 2022/11/18 15:40
- 防犯・セキュリティ 防犯カメラですが、 説明に、 APモード搭載、ネット環境がなくとも使用可能、と書いてあるのがあります 4 2022/12/06 14:27
- ルーター・ネットワーク機器 AU光10G回線について 6 2022/07/25 00:12
- ネットワーク クラウド環境の範囲について教えてください。 7 2023/03/09 15:50
- Google Maps 郵便番号を Google マップで調べる方法を教えてください 環境としては 日本に滞在して間もない 3 2022/03/23 12:25
- Windows 10 Windows10の回復環境 2 2023/02/03 19:13
- 一眼レフカメラ 「Imaging Edge」を手動起動せず、ARWファイルを最高画質JPEGへ変換する方法は? 2 2022/08/05 11:38
- その他(パソコン・周辺機器) isoファイルを、もっとも簡単に、テレビで見る方法はありますか? 3 2022/05/27 17:38
- ルーター・ネットワーク機器 wifiアダプターについて パソコンのスペックi54460 HDD1TB メモリー8GB TG705 2 2023/04/03 15:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<a href="#" …>の意味を教えて...
-
pythonのWebスクレイピングでfi...
-
chromeでの擬似クラス:focus に...
-
小窓を指定して開いた為に・・?
-
相対パスと絶対パスの速度
-
別ファイルのfunctionの読み込み方
-
JavascriptとJqueryを混在し記述
-
Dreamweaver で 外部JSを読み込...
-
条件分岐で、読み込む外部スク...
-
Safariで<iframe>のinnerHTMLを...
-
bodyにidをつける理由は何ですか?
-
JavaScriptでiframeの内容を「...
-
function の return 値を表示し...
-
リンクをクリックすると文字が...
-
jqueryでのkeydownイベント発生...
-
ウィンドウ名の設定
-
擬似フレーム
-
Mac IE でスクリプトエラー
-
上と左にフレームわけされてい...
-
<FORM ACTION= をつけると「宣...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<a href="#" …>の意味を教えて...
-
html メールリンクにて自動ファ...
-
相対パスと絶対パスの速度
-
フレームだけ閉じる方法ありま...
-
リンクに飛ばない・・・
-
pythonのWebスクレイピングでfi...
-
HTMLソースからURLだけを抜き出...
-
時間によってリンク先を変える...
-
個別にハイパーリンクの色を指...
-
<a href>での背景色について。
-
mailto + 変数名
-
プルダウンメニューからリンク...
-
POSTで<a hrefを送る方法について
-
chromeでの擬似クラス:focus に...
-
URLでEXEを呼出した際の、引数...
-
同意を求めて、次のページに進...
-
リンクを選択すると現れる点線枠
-
HTML内に記載された画像のURLを...
-
ある一定時間操作していない場...
-
iPadのロングタップ(長押し)...
おすすめ情報