10 返信 最新の回答 日時: May 17, 2015 7:56 PM ユーザー:mmy

    webビューアのデータを取得したい

    mmy

      タイトル

      webビューアのデータを取得したい

      フォーラムに投稿

      はじめまして。

      windows7でファイルメーカー13アドバンスを使っています。

      webビューア内でjavascriptを使って計算をしています。

       

      webビューアには

      "Data:text/html,"  &  テーブル名::フィールド名

      と記入しています。(web1という名前をつけています)

       

      フィールド名というフィールドには、HTMLやJavascriptを

      記入しています。

       

      Javascriptで計算した結果のソースを取得しようと

      GetLayoutObjectAttribute("web1","content")としてソースデータを取得します。

       

      そうすると、計算された結果が含まれていない値が取得されます。

      計算された結果が記入されていません。

       

      単純に手作業でコピーすれば取れますが、

      スクリプトで自動化したいと思っています。

       

      webビューア内に計算された値を取得する方法はないでしょうか?

       

        • 1. Re: webビューアのデータを取得したい
          qbxxdp

          JavaScriptの location.href で fmp: プロトコルを使えば、データの取得が可能です。

          例:
          data:text/html;charset=utf-8,
          <html>
          <head>
          <script type="text/javascript">
          location.href = 'fmp://$/test.fmp12?script=script01&$id=123'
          </script>
          </head>
          <body>
          </body>
          </html>

          上記をWEBビューアに設定すると、
          ファイル:test.fmp12 の
          スクリプト:script01 が実行され
          変数:$id の値が取得出来ます。


          参考:
          http://qbxxdp.blogspot.jp/2014/07/filemakergoogle-calendar.html

          • 2. Re: webビューアのデータを取得したい
            mmy

            さっそくご回答ありがとうございます。

            確認してテストしてみました。

             

            location.href = 'fmp://$/test.fmp12?script=script01&$id=123'

            と入力すると、スクリプトが動いて、$idの値が取れました。

            まさに、希望したとおりの動作です。ありがとうございます。

            そこで、この「123」の部分に変数を入れてみましたが、

            変数の文字だけが抜き取れました。

            変数名が「abc」であれば、「abc」とうい文字が取得できました。

             

            変数の文字ではなく、変数の中の文字はどうやって取得すれば

            良いのでしょうか。

             

            参考のURLを見ると

            location.href = 'fmp://$/test.fmp12?script=script01&$id=' +msg.id;

            と最後の部分が違っていたので、

            同じようにしてみましたが、できませんでした。

             

            javascriptがよくわからない初心者なので

            教えてもらえれば助かります。

            よろしくお願いします。

             

            • 3. Re: webビューアのデータを取得したい
              qbxxdp

              ご自身がどのようなコードを書いたのかを記載していただくと、
              答える側も解決策が見つけやすいですよ~。


              JavaScript の 変数 を渡したいと言う事ですね。
              以下の様な記述で解決します。


              【WEBビューア設定】
              data:text/html;charset=utf-8,
              <html>
              <head>
              <script type='text/javascript'>
              var Val = 'あいうえお';
              location.href = 'fmp://$/test.fmp12?script=script01&$id='+Val;
              </script>
              </head>
              <body>
              </body>
              </html>

              • 4. Re: webビューアのデータを取得したい
                mmy

                ご回答いただきありがとうございます。

                 

                テストしてみましたが、うまく出来ませんでした。

                確かにコードを記入したほうが良いですね。申し訳ありません。

                以下のようなjavascriptのコードで記入されています。

                ここで、テキストエリアに変数の値を記入しているようです。

                 var URLArea = document.getElementById("SURL");
                URLArea.value = siUrl;

                テキストエリアのhtmlは以下のようになっていました。

                 <textarea class="message" rows="10" name="SURL" id="SURL" ></textarea>

                この textarea に実際に計算した値が表示されています。

                 

                教えてもらったコードをjavascriptに次のように追加してみました。

                 var URLArea = document.getElementById("SURL");
                URLArea.value = siUrl;

                 location.href = 'fmp://$/filename.fmp12?script=javadata&$id='+siUrl;

                これですとうまく取れませんでした。

                変数でなければ動作するのですが、変数だと取得できないです。

                教えてもらえれば助かります。

                よろしくお願いします。

                 

                • 5. Re: webビューアのデータを取得したい
                  qbxxdp

                  <textarea>には、siUrlの値が表示されてますか?
                  表示されているなら大丈夫なはずですが。

                  原因の切り分けの為に
                  以下の様な記述でTESTして下さい。
                  値が取得できると思います。


                  var siUrl='何かしらの値';
                  location.href = 'fmp://$/filename.fmp12?script=javadata&$id='+siUrl;

                  • 6. Re: webビューアのデータを取得したい
                    mmy

                    ご連絡いただきありがとうございます。

                    あれから、いろなんな変数の値が取得できるかテストしてみました。

                    そうすると、値が取得できる変数と、取得できない変数があることがわかりました。

                    ご連絡いただいた以下のものもテストしました。

                    var siUrl='123';
                    location.href = 'fmp://$/filename.fmp12?script=javadata&$id='+siUrl;

                    これを試しみるとフィールドに「123」とうまく表示されました。

                    変数 siUrl の値を調べてみると、次のようになっていました。

                     var siUrl = "http://" + host + "/xml?" + canonicalQuery + "&Si=" + si;

                    この変数のすぐ後ろに、

                    location.href = 'fmp://$/filename.fmp12?script=javadata&$id='+siUrl;

                    を追加しても値が取得できませんでした。

                    取得できる変数と、そうでない変数があるのでしょうか(?_?)

                    <textarea>には、値が表示されています。

                    よろしくお願いします。

                     

                    • 7. Re: webビューアのデータを取得したい
                      qbxxdp

                      あぁ、
                       var siUrl = "http://" + host + "/xml?" + canonicalQuery + "&Si=" + si;
                      こういう事なんですねぇ。

                      おそらくxmlを取得していてデータ量が多いのでしょう。
                      Windowsの場合、データ量が多いとfnp:プロトコル経由のデータ渡しは、無理です。
                      代わりにクリップボード経由で行います。


                      var result = window.clipboardData.setData( 'Text', siUrl );
                      location.href = 'fmp://$/filename.fmp12?script=javadata


                      スクリプト:javadata は、
                      貼り付け [選択;フィールド]
                      にします。


                      もしくは、
                      "http://" + host + "/xml?" + canonicalQuery + "&Si=" + si
                      の「canonicalQuery」とか「si」がFileMakerで設定可能なら、
                      FileMakerの関数
                      「URLから挿入」
                      が利用出来ます。
                      コチラのほうが、動作が安定しています。
                      ※文字コードが「UTF-8」限定です。

                      • 8. Re: webビューアのデータを取得したい
                        mmy

                        ご連絡いただきありがとうございます。

                         

                        教えてもらったものを追加してみると、

                        var result = window.clipboardData.setData( 'Text', siUrl );
                        location.href = 'fmp://$/filename.fmp12?script=javadata

                         

                        クリップボードにコピーされ、フィールドに追加することができました!!!!

                        すごいです、ありがとうございます!!!!!

                         

                        これでようやく、結果を取得できることができました。

                         

                        あれから、いろいろとテストしていて分かったことがありました。

                        変数の中に「&」という文字を含めると、その文字から後ろの文字を

                        取得できないことがわかりました。

                        変数に10文字いれて、5番目に&を入れると、&とその後ろの文字が取得できないようです。

                        変数の設定で、

                         var siUrl = "http://" + host + "/xml?" + canonicalQuery + "&Si=" + si;

                        となっていましたので、最後のほうの文字が取得できませんでした。

                         

                        それから、「=」という文字を含めると、変数の全ての値が取得できないようです。

                        フィールドが空欄になります。

                        変数に10文字いれて、どこかに=を入れると、変数の全ての値が取得できないようです。

                        変数の中に=が含まれていました・・・・これが原因のようです。

                         

                        それから、「¥」を入れると、¥と後ろの1文字も消えるようです。

                         

                        ちなみに!、?、#、$、%は問題ありませんでした。

                         

                        こういった制約?があるのでしょうか。

                         

                        これらを事前にjavascriptで変換すれば取得できるのでしょうか。

                         

                        調べたところで、以下でやってみましたが、

                        siUrl.replace(/=/g, "#");

                        =は#に変換されていませんでした。

                        もし変換方法をご存知でしたら、よろしければ教えてください。

                        よろしくお願いします。

                         

                         

                        • 9. Re: webビューアのデータを取得したい
                          qbxxdp

                          あ~。勘違いしてました。
                          サーバーにアクセスして値を取得しているんでは無かったですね。!?

                          var siUrl = "http://" + host + "/xml?" + canonicalQuery + "&Si=" + si;

                          JavaScript変数:siUrl の値を取得しているだけなので、

                          以下で大丈夫大丈夫でしょう。

                          var fmData=encodeURIComponent(siUrl);
                          location.href = 'fmp://$/filename.fmp12?script=javadata&$id='+fmData;


                          クリップボード経由の場合は、

                          var fmData=encodeURIComponent(siUrl);
                          var result = window.clipboardData.setData( 'Text', fmData );
                          location.href = 'fmp://$/filename.fmp12?script=javadata

                          • 10. Re: webビューアのデータを取得したい
                            mmy

                            ご回答いただきありがとうございます。

                             

                            クリップボード経由でデータの取得ができました。

                            ありがとうございます!

                             

                            var fmData=encodeURIComponent(siUrl);
                            location.href = 'fmp://$/filename.fmp12?script=javadata&$id='+fmData;

                            については、データの取得ができませんでした。

                            でも、クリップボード経由で問題ないのでこれで解決できました。

                             

                            javascriptは本でちょっと読んだことがあるくらいで、

                            今回初めて、変数の設定などをしたくらいでしたので、

                            とても助かりました。

                             

                            インターネットで検索してファイルメーカーに関することをいろいろ調べていると

                            qb_dp様の名前を良く見かけます。とても助かりました。

                            またなにかありましたら質問させてもらいます。

                            よろしくお願いします。