回答編集履歴

1

解決策を追加

2018/04/20 10:02

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -3,3 +3,119 @@
3
3
 
4
4
 
5
5
  代替案としては`foreignObject`要素配下にjQueryを用いた通常のHTMLページを表示する`iframe`要素を仕込んでおくのは如何でしょうか?
6
+
7
+
8
+
9
+ ---
10
+
11
+
12
+
13
+ 一度不可能と啖呵を切ってしまった手前, いろいろ考えた結果`iframe`の中身を`document.write`で動的に書き換えるようにすれば何とかなるかもしれません.
14
+
15
+
16
+
17
+ ※とは言え動作は不安定ですから動作検証は慎重に行なって下さい.
18
+
19
+ (うろ覚えですが, ふとしたタイミングで`iframe`の中身が真っ白となるかもしれません)
20
+
21
+
22
+
23
+ ```XML
24
+
25
+ <svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
26
+
27
+ <metadata id="source"><![CDATA[
28
+
29
+ <!DOCTYPE html>
30
+
31
+ <html lang="ja">
32
+
33
+ <head>
34
+
35
+ <meta charset="UTF-8">
36
+
37
+ <link rel="stylesheet" href="https://cdn.datatables.net/t/bs-3.3.6/jqc-1.12.0,dt-1.10.11/datatables.min.css"/>
38
+
39
+ <script src="https://cdn.datatables.net/t/bs-3.3.6/jqc-1.12.0,dt-1.10.11/datatables.min.js"></script>
40
+
41
+ <script>
42
+
43
+ jQuery(function($){
44
+
45
+ $("#foo-table").DataTable();
46
+
47
+ });
48
+
49
+ </script>
50
+
51
+ <title></title>
52
+
53
+ </head>
54
+
55
+ <body>
56
+
57
+ <table id="foo-table" class="table table-bordered">
58
+
59
+ <thead>
60
+
61
+ <tr><th>No</th><th>くだもの</th></tr>
62
+
63
+ </thead>
64
+
65
+ <tbody>
66
+
67
+ <tr><td>1</td><td>りんご</td></tr>
68
+
69
+ <tr><td>2</td><td>みかん</td></tr>
70
+
71
+ <tr><td>3</td><td>ぶどう</td></tr>
72
+
73
+ </tbody>
74
+
75
+ </table>
76
+
77
+ </body>
78
+
79
+ </html>
80
+
81
+ ]]></metadata>
82
+
83
+ <foreignObject width="80%" height="80%">
84
+
85
+ <html xmlns="http://www.w3.org/1999/xhtml">
86
+
87
+ <body xmlns="http://www.w3.org/1999/xhtml">
88
+
89
+ <iframe id="iframe" width="100%" height="100%" style="border:none;"></iframe>
90
+
91
+ </body>
92
+
93
+ </html>
94
+
95
+ </foreignObject>
96
+
97
+ <script><![CDATA[
98
+
99
+ {
100
+
101
+ const html = document.querySelector("#source");
102
+
103
+ const iframe = document.querySelector("#iframe");
104
+
105
+ const doc = iframe.contentDocument;
106
+
107
+ doc.open();
108
+
109
+ doc.write(document.querySelector("#source").textContent);
110
+
111
+ doc.close();
112
+
113
+ }
114
+
115
+ ]]></script>
116
+
117
+ </svg>
118
+
119
+
120
+
121
+ ```