5 返信 最新の回答 日時: Jul 20, 2009 1:48 AM ユーザー:sam_oda

    data:text/html,をweb viewerで使用する場合のlocation.hostについて

    sam_oda

      タイトル

      data:text/html,をweb viewerで使用する場合のlocation.hostについて

      フォーラムに投稿

      macのwebviewerにおいて

      data:text/html,<html><script type='text/javascript'>document.write(location)</script></html> 

      を実行するとapplewebdata//2729A-G94-1312D-ASDE12/のような結果を得ることができます。(この数字は毎回違う数字が返されます)

      これはdata:text/html,につづくHTMLをfilemakerが内部の仮想HTTPserverにhostしていることを示していると思うのですが、そのような理解の仕方は正しいでしょうか。また、そうした場合に、そこからローカルにあるライブラリファイルに参照を求めるにはどのようにすればよいでしょうか。通常は<script src="xxx.js">と相対パスで指定したり、src="file:///Users/someone/documents/libraries/xxx.js"のように絶対パスを指定したりすると思うのですが...。自分で試みた限りではやはりともに駄目でした。何かよい方法があればお教えいただけないでしょうか。よろしくお願いいたします。ちなみに、windowsで同じことをやると問題なく外部ファイルを参照できます。location.hostとしても何も表示されません。ローカルファイルを開いているという扱いになっているのだと思います。

        • 1. Re: data:text/html,をweb viewerで使用する場合のlocation.hostについて
          Hiro
            

          おそらく外部参照SRCにローカルパス(file:スキーム)を宛てることは出来なのではないでしょうか。

          今Macは検証環境になく確認できませんが、少なくともこちらWinのテストでは、

          > windowsで同じことをやると問題なく外部ファイルを参照できます。

          は確認できません。おそらく以下の理由からMacも同じくダメではと想像します。

          もしこれが許されるなら、HTMLにクライアントのローカルファイルパスを仕込んでおけば、クライアントのファイルを操作できてしまうことになります。

          以上は私の仮説ですが、もし外部ファイル参照するのが目的なら、標準通り目的の外部JSファイルを静的Web公開(自己PC内公開)してそれをhttp:スキームで参照するのが確実な方法でしょう。

          FMPでは、ファイルを静的Web公開しかも自己内限定公開・自己参照するだけならいたって簡単です。ただ、公開ファイルをFMPアプリ直下のWebフォルダに入れ、インスタントWeb共有機能をオン(オン・ラジオボタン以外の設定は全て無用)にするだけです。

          あとは、src="http://localhost/xxx.js"とソースURL指定します。

          にHiroにより編集されたメッセージ
          • 2. Re: data:text/html,をweb viewerで使用する場合のlocation.hostについて
            sam_oda
              

            Hiro様、丁寧にお教えいただきありがとうございます。しかもご自身のマシンで検証までしていただいたみたいで本当にありがとうございます。たしかにHiroさんのおっしゃるように私のいうようなことができれば、クライアントのファイルを操作することができ、セキュリティ上問題ですよね。ただweb viewerの場合、本当のサーバーではないので何か方法があるのではないかと思った次第です。

            document.write(location.host);<!--  windowsg0o0UO・h・yU0・j0D00 --> document.write("
            "); document.write(location);<!--  windowsg0o0・・ォ0・ユ0。0、0・x0n0ム0ケ0L0h・yU0・・0 --> しかし、windowsの方ですが、私の環境ではできてしまいます。(OS:Vista Ultimate,IE8,FM10advanced)data:text/htmlに続くHTMLのjavascriptタグ内でdocument.write(location)を記述すると次のような結果が帰ってきます。file:///C:/Users/someone/AppData/Local/Temp/FMTEMPFM4a639fe90009.htm macの場合、よくわからないhost名、location名が返されてくるのに対しwindowsではローカルファイルへのパスが返されてきます。このようなことから、macとwindowsでは内部的な扱いが違うのではないかと思うのです。実際、以下のようなコードを記述するとweb viewer内でjQueryなどのjavascriptライブラリを利用できてしまいます。

            data:text/html,
                <html>
                    <head>
                        <title>test</title>
                        <script  type="text/javascript" src="file://c:/users/someone/desktop/somefolder/scripts/jquery-1.3.2.js"></script>
                        <script type="text/javascript">$(function(){$('h1').css('color','red');});</script>
                    </head>
                    <body>
                        <h1>hello</h1>
                    </body>
                </html>




            • 3. Re: data:text/html,をweb viewerで使用する場合のlocation.hostについて
              sam_oda
                

              前回お返事の中程に"document.write....."が続けて3つほどあやまって混入してしまっています。その部分は無視してください。

              よみにくくなってすみません。

              • 4. Re: data:text/html,をweb viewerで使用する場合のlocation.hostについて
                Hiro
                  

                変ですネ、こちらの環境ではやはり再現できません。

                環境は、

                Win XP Pro(+IE7)+ FMP9v3Adで、

                Webホルダ内に、

                ・js.js ファイル:  alert(location.href)

                ・js.html ファイル: <script Type="text/javascrip" src="file:///C:/Program Files/FileMaker/FileMaker Pro 9 Advanced/Web/js.js"></script>

                を設置し、Webビューアに以下のURLを打ちテストしました。

                ・URL: DATA:text/html,<script Type="text/javascript" src="http://localhost/js.js"></script> 結果:成功 

                 アラート内容(file:///C:/Documents%20and%20Settings/Admin/Local%20Settings/Temp/FMTEMPFM4a63dadd002a.htm)(仮想フォルダTempと仮一時HTMLファイルを生成してるようです。)

                ・URL: DATA:text/html,<script Type="text/javascript" src="file:///C:/Program Files/FileMaker/FileMaker Pro 9 Advanced/Web/js.js"></script> 結果:失敗(エラーなし、HTMLソースは正常取得、jsだけが起動しない状態)

                以下は補足テスト

                ・URL:file:///C:/Program Files/FileMaker/FileMaker Pro 9 Advanced/Web/js.js 結果:jsファイルのダウンロードが起動、保存は成功、開く実行はMS JScriptの文法エラー。

                ・URL:file:///C:/Program Files/FileMaker/FileMaker Pro 9 Advanced/Web/js.html 結果:失敗(エラーなし、HTMLソースは正常取得、jsだけが起動しない状態)

                 

                 

                以上ですが、もし、環境により変わるのであれば、ココはローカルパスであえて冒険するよりは、環境・プラットフォームによらないグローバルなhttpパスを使ったほうが安全確実に思います。

                • 5. Re: data:text/html,をweb viewerで使用する場合のlocation.hostについて
                  sam_oda
                     Hiro様、いろいろと検証していただきありがとうございました。環境によって得られる結果が全く違うということがよくわかりました。ここでご相談したことでいろいろなことが勉強できました。初めての質問で躊躇するところがあったのですが、ご相談できてよかったです。感謝申し上げます。