私が構築している単純な Flask アプリケーションには、キーワード検索クエリ フィールド (および AJAX 呼び出しを介して挿入されたそのクエリの結果) を備えたエンドポイント/ビューがあります。
ユーザーが [送信] ボタンをクリックすると、キーワードを含む AJAX POST 要求が作成され、サーバーは一連のリストで応答します。各リストは、個々のマルチメディア ファイル アセットのタイトル、説明、および mp4 URL リンクを含む検索結果です。
マルチメディア データのこれらの小さな「パケット」は、ページ内の AJAX プロセスの一部として Javascript を介して繰り返され、次のinnerHTMLように DOM に挿入されます。
for(i = 0; i < serverResponseBody.length; i++){
var vidPacket = JSON.stringify(serverResponseBody[i]);
// converting to JSON object so we can extract values of keys in each packet
var vidPacketMod = JSON.parse(vidPacket);
console.log(vidPacketMod);
console.log(vidPacketMod["description"]);
var idxID = i;
var desc = vidPacketMod["description"];
var name = vidPacketMod["name"];
var url = vidPacketMod['url'];
var thumbnail = vidPacketMod['thumbnail'];
var tags = vidPacketMod['tags'];
var div = document.createElement('div');
div.innerHTML += '<div class="list-group" id='+idxID+'><h4 class="list-group-item-heading">'+name+'</h4><img src='+thumbnail+' height="90" width="160"><p class="list-group-item-text">'+desc+'</p><button type="button" class="btn btn-info" data-toggle="modal" data-target="#myModal--'+idxID+'">Get Asset Data</button><div class="modal fade" id="myModal--'+idxID+'" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="myModalLabel">'+name+'</h4></div><div class="modal-body"><p><b>DESCRIPTION: </b>'+desc+'</p><p><b>TAGS: </b>'+ tags+'</p><button class="btn" data-clipboard-text='+url+'>Copy Source File Url</button><script src="/static/clipboardJS/clipboard.min.js"><\/script><script>var clipboard = new Clipboard(".btn"); clipboard.on("success", function(e) { console.log(e); }); clipboard.on("error", function(e) { console.log(e);});<\/script></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div></div>';
vidInsert.appendChild(div);
data-clipboard-textこのページで、ユーザーが「Get Asset Data」というボタンをクリックすると、値として要素に挿入されたファイル URL をコピーする「Copy Source File URL」というボタンを含む Bootstrap オーバーレイ要素が作成されます。Clipboard.js
次のようになります。
Chrome でレンダリング/挿入された HTML および JS コードを調べると、次のように表示されます。
ボタンは何もせず、Copy Source File Urlファイル URL をクリップボードにコピーせずalert()、機能をテストするために を挿入しても何も起こりません。
ここで Clipboard.js が期待どおりに機能しないのはなぜですか? ページに HTML および JS コードを直接設定する場合 (つまり、JS innerHTML を使用してクリップボード js を含むコード ブロックを DOM に挿入しない場合) にこの機能を実装することはできますが、このアプローチでは機能しないようです。上記で概説しました。

