BOXのディレクトリ階層のフルパスを取得するブックマークレット

この記事は、[富士通ソーシアルサイエンスラボラトリ Advent Calendar 2019](http://qiita.com/advent-calendar/2019/ssl)の17日目の記事です。
ここに書かれている内容はすべてあくまでも私の個人の活動であり、所属組織を代表するものではありません。

# BOX のフォルダの階層構造を含めたフルパスを取得したい！！！

![2019-12-16_13h26_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281587/4fe67982-01f2-0698-34fb-0c8c6de63e47.png)

普通に選択してコピーしようとすると `・・・` がそのまま `・・・` とコピーされてしまう！ 
フォルダ名が、上記のようになっている場合、下記のように取得したい！！！！

```
すべてのファイル > フォルダ1 > フォルダ2 > フォルダ3 > フォルダ4
```

# 取得方法
Chrome のDevToolsを開き、フォルダ階層を取得できそうなScriptタグ内の変数 `Box.postStreamData` を見つけたので、加工を行う。

```javascript
Box.postStreamData[Object.keys(Box.postStreamData)[0]].folder.path.map(i => i.name).join(" > ")
```

# ブックマークレット用のソース
[WebページのタイトルとURLをワンクリックでコピーするBookmarklet](https://qiita.com/xshoji/items/93d5345d4bf282f60817) を参考にさせていただきました。

```javascript
var global = window;
global.COPY_TO_CLIPBOARD = global.COPY_TO_CLIPBOARD || {};

global.COPY_TO_CLIPBOARD.getBoxDocumentPWD = function () {
    return Box.postStreamData[Object.keys(Box.postStreamData)[0]].folder.path.map(i => i.name).join(" > ");
};

global.COPY_TO_CLIPBOARD.copyToClipboard = function() {
    var copyFrom = document.createElement("textarea");
    copyFrom.textContent = this.getBoxDocumentPWD();
    var bodyElm = document.getElementsByTagName("body")[0];
    bodyElm.appendChild(copyFrom);
    copyFrom.select();
    var retVal = document.execCommand('copy');
    bodyElm.removeChild(copyFrom);
    return retVal;
};

global.COPY_TO_CLIPBOARD.copyToClipboard();
```

# ブックマークレットに登録する
ブックマークレットに登録する方法は[こちら](https://qiita.com/aqril_1132/items/b5f9040ccb8cbc705d04)の記事を参考にしてください。

```javascript
javascript:var global = window;global.COPY_TO_CLIPBOARD = global.COPY_TO_CLIPBOARD || {};global.COPY_TO_CLIPBOARD.getBoxDocumentPWD = function () {    return Box.postStreamData[Object.keys(Box.postStreamData)[0]].folder.path.map(i => i.name).join(" > ");};global.COPY_TO_CLIPBOARD.copyToClipboard = function() {    var copyFrom = document.createElement("textarea");    copyFrom.textContent = this.getBoxDocumentPWD();    var bodyElm = document.getElementsByTagName("body")[0];    bodyElm.appendChild(copyFrom);    copyFrom.select();    var retVal = document.execCommand('copy');    bodyElm.removeChild(copyFrom);    return retVal;};global.COPY_TO_CLIPBOARD.copyToClipboard();
```

# IEでの取得方法
IE 11で動作確認を行いました。

```javascript
Box.postStreamData[Object.keys(Box.postStreamData)[0]].folder.path.map(function(i) { return i.name;}).join(" > ");
```

ブックマークレット

```javascript
javascript:var global = window;global.COPY_TO_CLIPBOARD = global.COPY_TO_CLIPBOARD || {};global.COPY_TO_CLIPBOARD.getBoxDocumentPWD = function () {    return Box.postStreamData[Object.keys(Box.postStreamData)[0]].folder.path.map(function(i){return i.name;}).join(" > ");};global.COPY_TO_CLIPBOARD.copyToClipboard = function() {    var copyFrom = document.createElement("textarea");    copyFrom.textContent = this.getBoxDocumentPWD();    var bodyElm = document.getElementsByTagName("body")[0];    bodyElm.appendChild(copyFrom);    copyFrom.select();    var retVal = document.execCommand('copy');    bodyElm.removeChild(copyFrom);    return retVal;};global.COPY_TO_CLIPBOARD.copyToClipboard();
```

# 注意事項
フルパスを取得したいフォルダまで移動してから、ブックマークレットを実行する前にページを更新(F5)しないと、正しく取得できません！！
`Box.postStreamData`には、初回アクセスしたときの情報しかないみたいです。
取得する方法が他にもあるぜ！って方がいらっしゃいましたら、コメントください。