人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

XMLをXSLを使ってブラウザに表示させるときに、外部JavaScriptを使ってブラウザ判定をして、ブラウザにあった外部CSSファイルを適用したいのですが、JavaScriptが効いてくれません。JavaScript自体はHTMLの状態で効果があったのですが、XSLで書き出すと効かないのです。原因と打開策を探しています。よろしくお願い致します。

●質問者: buriki8
●カテゴリ:ウェブ制作
✍キーワード:CSS HTML JavaScript XML XSL
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● emurai
●32ポイント

あの、どのようにして外部CSSを適用しているのでしょうか?

<?xml-stylesheet

<link

あとXSLでどのように書き出しているのですか?

◎質問者からの返答

元となるxmlには

と記述しています。

変換用(仮)のxslファイルにはxmlのタグの後、

htmlのソースを書いておりまして、その中で

<title>タイトル</title>

<script language=”javascript” src=”../../css/style.js”></script>

のように記述しています。


2 ● unno
●32ポイント

<script type=”text/javascript” src=”test.js”></script>

まず、外部ファイルにして呼び出すなど、問題の切り分けをしてみてください。

◎質問者からの返答

ありがとうございます。

いろいろ試したところ、javascriptは動いているようなのですが、cssが適用されていないということがわかりました。javascriptの内容が間違っているのでしょうか?

function loadCSS(path){

var ua = navigator.userAgent.toLowerCase()

//--今回CSS処理するブラウザリスト

if(document.layers)return //n4は崩れるので使わない

var winie = ua.indexOf(’msie’)!=-1 &&

ua.indexOf(’win’)!=-1 //win-e3〜

var moz = ua.indexOf(’gecko’)=-1 //moz1〜

//デフォルトパスを./に設定する

if(!window.loadCSS.arguments[0]) path=’../../css/’

//cssファイル名用変数

var cssfile = path

//--ブラウザごとのCSSファイル

if (winie) cssfile += ’style_win_ie.css’

else if (moz) cssfile += ’style_win_mo.css’

else cssfile = ’’

var linktag = ’’

if(cssfile !=’’){

//各パス内のall.css

linktag +=’<link rel=”stylesheet” ’</p>

+ ’ type=”text/css” ’

+ ’ href=”’

+ path

+ ’all.css’

+ ’”>’

//ブラウザごとのcss

linktag +=’<link rel=”stylesheet” ’</p>

+ ’ type=”text/css” ’

+ ’ href=”’

+ cssfile

+ ’”>’

}

alert(”test”)

//出力

document.write(linktag)

}

loadCSS()


3 ● izayoimizuki
●32ポイント

多分XSLTで変換している限りDOMの観念を使わないと

変換後のXHTMLとJavaScriptが連携できないと思います。

DOMにはあまり詳しくないのでここまでしかいえませんが・・・

#XSLTが必要となるとMSIE4.X以降とMozilla1.0以降位しか無いわけで

#ブラウザごとに違うCSSを適用する理由があまりないように思いますが・・・

#Netscape4.XやMSIE3.0はXSLT自身に対応していないわけですし。

◎質問者からの返答

ありがとうございます。

変換後のXHTMLとJavaScriptが連携しないということでしょうか?

DOMについてのページをさがしてみます。


4 ● ikairoku
●32ポイント

ブラウザの判定とか省いてますが、

function loadCSS(){

var link = document.createElement(’link’);

var head = document.getElementsByTagName(’head’)[0];

link.rel = ’stylesheet’;

link.type = ’text/css’;

link.href = ’all.css’;

head.appendChild(link);

}

<body onload=’loadCSS()’>

でどうでしょう。

◎質問者からの返答

ありがとうございます。外部javascriptに追加して使うファンクションですね。javascriptも勉強中です。試してからまたご報告します。


5 ● amanoftaste
●32ポイント

http://www.microsoft.com/japan/msdn/columns/corner/corner0127200...

ご指定のページが見つかりません

下記URLに面白そうなことが書いてあります。

これに、ブラウザ判別する部分を付け加えるというのはどうでしょう。

HTMLファイル等が、XMLとXSLを取り込む形になるので、

何とかなりそうな気がします。

◎質問者からの返答

すみません。自己解決いたしました。

javascriptの記述が間違っておりました。

//デフォルトパスを./に設定する

if(!window.loadCSS.arguments[0]) path=’../../css/’

この部分を

if(!window.loadCSS.arguments.length) path=’../../css/’

に変更することで読み込んでくれました。

お騒がせいたしました。

みなさまありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ