none
SharePointアプリパーツ(アドインパーツ)で、埋め込まれたページの情報を取得したい RRS feed

  • 質問

  • お世話になります。

    現在、VisualStudio2013で、SharePointOnline2013向けのSharePointホスト型アドインを開発しております。

    今まで、リストの表示フォーム、編集フォームにスクリプトエディタ、(またはJSリンク)を直接埋め込んで、処理を行っていたのですが、

    SharePointアドイン上でアプリパーツを作成し、そこで処理を行うようにしようとしています。

    イメージとしては、今まで直接埋め込んでいた処理を、アプリパーツで表示するiframeページ領域で処理するようにし、

    その処理結果を親画面に、無理なら最悪iframeページ内に出すようなイメージだったのですが、その行いたい処理でリストのGUIDや、アイテムのID等を取得して処理をしており、

    アプリパーツ内に処理を記述しても、アプリパーツで表示しているページ情報しか拾えず、困っています。

    私自身ifreamに関する知識が乏しく、調べながら親ページの情報を取得しようと試みたのですが、上手く取得できていない状態です。

    アプリパーツのelement.xmlに使用できるトークンの値を下記のページで調べて確認したのですが、求める情報は取得できませんでした。

    参考:SharePoint アドインの URL 文字列とトークン

    そこで、SharePointアドインで作成されたアプリパーツから、アプリパーツを埋め込んであるリストページの情報を取得する方法をご教授頂けないでしょうか。下記の情報を取得したいと考えております。

    ・リストのGUID、またはリスト名

    ・リストアイテムのID

    ・ページのURL

    以上となります。何卒よろしくお願い致します。


    • 編集済み sttks 2016年6月16日 10:33 誤字の訂正
    2016年6月16日 10:29

回答

  • 答えではないのですが、アドイン側のrefererに親ページのURLが入っていたりしないでしょうか?
    表示フォーム等であれば、URLにリストのURLやアイテムIDが入っているので、このURLがアドイン側のrefererに入っていれば、そのURLからほしい情報が取れるのではないかと。

    基本的にiframeの内側のページから親ページの情報を取得するのは、セキュリティ上問題があるのでブラウザがそれを許してくれません。
    なので、がんばって自分自身が持っている情報の中で対応していくしかないです。

    そうなると、親とのつながりは自分自身のURLにわたってくるクエリ文字列か、Refererくらいしかないと思います。

    refererにもなかったら・・・厳しいかもしれないですね。

    SharePoint Developer http://sharepoint.orivers.jp

    • 回答としてマーク 星 睦美 2016年12月1日 1:29
    2016年6月16日 17:39

すべての返信

  • 答えではないのですが、アドイン側のrefererに親ページのURLが入っていたりしないでしょうか?
    表示フォーム等であれば、URLにリストのURLやアイテムIDが入っているので、このURLがアドイン側のrefererに入っていれば、そのURLからほしい情報が取れるのではないかと。

    基本的にiframeの内側のページから親ページの情報を取得するのは、セキュリティ上問題があるのでブラウザがそれを許してくれません。
    なので、がんばって自分自身が持っている情報の中で対応していくしかないです。

    そうなると、親とのつながりは自分自身のURLにわたってくるクエリ文字列か、Refererくらいしかないと思います。

    refererにもなかったら・・・厳しいかもしれないですね。

    SharePoint Developer http://sharepoint.orivers.jp

    • 回答としてマーク 星 睦美 2016年12月1日 1:29
    2016年6月16日 17:39
  • 及川 紘旭 様

    お世話になっております。

    refererの方も試してみたのですが、どうやらrefererにはiframe内の情報しか持っていないようなのです。

    他に打つ手も無く、アプリパーツでの実装は不可能なのかなといった状況です。

    ご回答ありがとうございました。

    2016年6月17日 1:22
  • 全く試しておらず恐縮ですが、以下のようなクロスドメイン通信用のPostMessageを利用して実現できないでしょうか。

    ・マスターページ側のJavascript

    $(document).ready(function() {

        var ifrm = document.getElementById('ifrm').contentWindow;

        ifrm.postMessage('[リストIDなどの文字列やURL]', 'http://ホスト名');

    });

    ・アドイン側のJavascript

    window.addEventListener('message', function(event) {

          // メッセージを受け取る

          var txt = event.data;

    }, false);

    • 回答の候補に設定 星 睦美 2016年12月1日 1:29
    2016年6月17日 2:50
  • たけさと 様

    お世話になっております。

    実のところ、この処理を組み込んだアドインをストアに乗せようと考えており、

    審査に落ちた原因として「アドイン外にスクリプトを埋め込む必要がある」という内容があったため、

    スクリプトエディタのスクリプトをアプリパーツを使って埋め込む方法はないものかと考えていた次第です。

    ご提案頂いた内容ですと、マスターページ(親ページ?)にスクリプトを埋め込まねばならず、恐らく審査で落とされてしまいます。。。

    折角ご提案頂いたのに申し訳ありません。

    ご回答ありがとうございました。

    2016年6月17日 11:44