ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

JavaScriptコミュのwindow.open()でアクセスが拒否されました

  • mixiチェック
  • このエントリーをはてなブックマークに追加
【問題点】
window.open()でJavaScriptエラー「アクセスが拒否されました」が発生しています。
昔からある環境(本番サーバーに接続しているクライアント)では正常に表示されるのに、最近構築したテスト環境(テストサーバーに接続しているクライアント)では上記JavaScriptエラーが発生してしまいます。

【過去の経緯】
IE5時代に構築したwebのシステムで、サーバーはlinuxです。
ローカルマシン上にあるファイルを、サーバーにアップロードする前に内容を確認したいという要望があり、window.open()で、ローカルマシン上にあるファイル(excel等)を表示する仕組みになってます。

【問い合わせ内容】
下記の様な環境の違いや、気になる点がありますが、お客様へ収めているシステムの為、これが原因と特定できる情報が欲しく、皆さんのお知恵を貸して下さい。

【環境の違い】
1.正常に実行される本番環境の構成
サーバー・・・Linux
クライアント・・・WindowsXP,SP1,IE6
2.異常が発生するテスト環境の構成
サーバー・・・Linux(別サーバーだが同一プログラムを起動)
クライアント・・・WindowsXP,SP3,IE6

【気になる点】
下記の文献があり、IE6(SP1)からは、セキュリティの関係上、ローカルマシンのファイルは閲覧できないと記載があります。
http://support.microsoft.com/kb/436868/ja

ただ、回避方法は明記されてるので、異常が発生してるSP3が適用されてるクライアントに、同様の設定をしても、ローカルマシンのファイルは閲覧できません。
ただし、ネットワーク上のファイルはどちらのマシンでも閲覧できます。
SP1では回避方法があったのが、セキュリティの強化により、SP3では回避できない仕様なのかな?とも思いますが、明確にどこかのサイトに記載されてれば、これが原因と言えるのですが。

コメント(12)

問題の切り分けとして
1.サーバー・・・Linux
に対して
2.クライアント・・・WindowsXP,SP3,IE6
でアクセスして同様の操作を行うと、どの様な現象が起きますか?

本番環境なので、この確認すら行えないかもしれませんが、
私の予想では恐らく「アクセスが拒否されました」が発生する筈…。
予想通りであれば、環境の違いはクライアントだけなので、OSのバージョンの違いか
IEのマイナーバージョンの違いが原因でしょう。

回避策としては、サイトに記述されている様に
 1.ブラウザの設定を変える
又はネットワーク上のファイルは閲覧可能なので
 2-1.本番アップロード前の確認に、ネットワーク上の一時ディレクトリに仮アップロードする
 2-2.ユーザが確認したらネットワーク上の一時ディレクトリから本番アップロードする
 2-3.仮アップロードしたネットワーク上の一時ディレクトリ内のファイルを削除する
 2-4.バッチ処理でネットワーク上の一時ディレクトリ内の古いファイルを定期的に削除する

が思い付きました。
ボクの開発端末ではWIndowsXP,SP2,IE6なんですが、こちらも同様にローカルマシン上のファイルは開かないので、SP2からのセキュリティ強化が原因じゃないかな?と思うんですが、文献が無い以上、想像でしかないですけど・・・

言われてる通り、本番環境で確認することが難しいので、ネット上のネタから原因を探ってる状況です。

こちらで切り分け方法を整理して、お客さんに提案するしか方法はないですよね・・・
ローカルのファイルを開くって危険(実行ファイルに引数つけて呼び出しとか)だからセキュリティ強化が原因かと。
プレビューのようにするには、例えばGmailなどでファイル添付をするときのように、Flash経由でサーバーにアップロードしてそのサーバー上のファイルを開くとかで対処するしかないのでは。
>こちらで切り分け方法を整理して、お客さんに提案するしか方法はないですよね・・・
時間が無いのであれば、それが無難かもしれません。

IEの設定を変える事で回避出来るみたいです。
問題の切り分けとして試してみて下さい。
http://shoppers-jp.com/pc_faq/ie_active_local.html
セキュリティの強化は必要が有るから強化されている訳で、解決策としてはお奨めしません。
皆さんありがとうございますm(__)m

>にゃんこさんへ

私も、セキュリティ強化が原因じゃないかな?と思ってるんですが、お客様に報告するのに、「だと思われる」より「これが原因です」と言えたらなと思い、文献探してるんですが、なかなか見つけることができてません。
最悪は、「だと思われる」ってことと、ちゅぷりぎゃんさんが書かれてるように「できない=セキュリティ強化」ということから、やるべきではないという方向に持っていくべきかな、と考えてます。

>ちゅぷりちゃんさんへ

試してみたけど、現象は変わりませんでした。
「セキュリティ保護のため、コンピュータにあくせすできるアクティブコンテンツは表示されないよう〜」っていう現象を取り除く為のものと記載がありました。
こちらでは、そういう現象が起きてないので、解決しなかったんだと思います。
「もしや解決?」と期待たんですが、ダメでした(TT)

>皆さんへ

ブラウザ・バージョン・SP依存するJavaScriptって、お客様の環境変えられた場合のこと考えて、クロスブラウザ対のオープンソフト使う方が無難なのかな?と思ってしまいました。
他に、「これじゃない?」っていう情報がありましたら、よろしくお願いします。
最終的に結果でたら、こちらからもUPします。
> 「できない=セキュリティ強化」ということから、やるべきではない
少なくとも開発元の身元がはっきりしているならやってもいいと思いますよ。
アップロードするファイルのサイズが小さいのであれば、やはり一度アップロードしてという方法がよろしいかと。もはやプレビューでもなんでもないけど。

強引な方法としては、ローカルにサーバー的なのを設置してそれを経由させるとか。

IEでしかやらないのであればActiveXでどうにかできそうな気はします。
htmlファイルの1行目に、
<!– saved from url=(0013)about:internet –>
と書くことで、インターネットゾーンとみなしてくれるはずです。
DOCTYPE宣言などより前、本当に1行目です。改行はCRLFで。
otnさんへ

<!– saved from url=(0013)about:internet –>って1行目なんですね。
DOCTYPEより下に記載してました・・・

明日、会社で試してみて、結果書き込みしてみます。
これでうまくいいくいかないは別にして、1つ勉強になりました。
ありがとうございますm(__)m
<!-- saved from url=(0013)about:internet -->を1行目に記載してみたんですが、アクセスが拒否されましたのJavaScriptエラーは解決しませんでした。
Internet Explorer の黄色の情報バーにセキュリティメッセージが表示された場合の回避方法みたいで、アクセスが拒否されましたの事象とは別物のような気がします。
すいません。よく読まず、問題点を全く誤解してました。

saved from は、アクティブコンテンツを含んだHTMLをローカルPCにおいて、そのHTMLをIEで開いた時に、ローカルでなくインターネットゾーンやイントラネットゾーンにあると見なすための機能です。

問題点は、サーバー上に置いたHTMLから起動されるJavaScriptでクライアントPC上のローカルファイルが開けないと言うことですね。すでに出ているようにセキュリティ的に無理です。
無理にやるとすると、WSHを使って、

<script type="text/javascript">
var Shell = new ActiveXObject("WScript.Shell");
Shell.Run("explorer.exe C:\\temp\\a.docx");
</script>

のようにして、さらにクライアントPCのインターネットオプションでサーバーの該当するゾーンのセキュリティ設定で、「スクリプトを実行しても安全だとマークされていないActiveXコントロールの初期化とスクリプトの実行」 を無効以外にしてください。

ただ、見ればわかる通り、その設定にするとクライアントPC上の任意のプログラムを実行出来てしまいますので、使う判断が難しいかと思います。


お書きのように、一度アップロードしてから開くというのが良いんじゃないでしょうか。
本来は、クライアントのファイルを閲覧できるべきではないんだと思います。
ただ、回避策として一つ手法があったので、記載しておきますね。
本来あるべき姿ではないので、個人的にはお勧めしませんが・・・

下記の様に、ActiveXを使って、コマンドラインからキックするイメージだと
うまくいきました。

var Shell = new ActiveXObject("WScript.Shell");
Shell.Run(表示したいファイルパス);

ただし、ActiveXが使えるようにIEのオプションを設定する必要があるので、
イントラか信頼済みゾーンに行くように設定するのは必須かなと思います。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

JavaScript 更新情報

JavaScriptのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。