回答編集履歴

4

documentについて追記しました

2018/03/08 16:51

投稿

退会済みユーザー
test CHANGED
@@ -110,7 +110,7 @@
110
110
 
111
111
 
112
112
 
113
- iframe 内の link や script の要素を生成するのに、親ウインドウにある jQuery($)や document をつかわないのがポイントです。iframe 内の要素は iframe.contentWindow.document を使って生成しないと、データを読み込んでくれせん
113
+ iframe 内の link や script の要素を生成するのに、親ウインドウにある jQuery($)や document をつかわないのがポイントです。親の document で生成された要素を iframe の中に持っていっても、データを読み込んでくれません。iframe 内の要素は iframe の document、つまり iframe.contentWindow.document 生成しま
114
114
 
115
115
 
116
116
 

3

連投は気持ち悪いので、追記で対応します。連投してしまった方の回答は削除リクエストを出しました。

2018/03/08 16:51

投稿

退会済みユーザー
test CHANGED
@@ -4,36 +4,118 @@
4
4
 
5
5
  ```javascript
6
6
 
7
- <head>
7
+ function start() {
8
8
 
9
- <script>
9
+ if (window.$ && window.$.ui) {
10
10
 
11
- function start() {
11
+ $(document).ready(function(){
12
12
 
13
- if (window.$ && window.$.ui) {
13
+ func_test();
14
14
 
15
- $(document).ready(function(){
15
+ });
16
16
 
17
- func_test();
17
+ } else {
18
18
 
19
- });
19
+ setTimeout(start, 50);
20
20
 
21
- } else {
21
+ }
22
22
 
23
- setTimeout(start, 50);
23
+ }
24
24
 
25
- }
26
-
27
- }
28
-
29
- start();
25
+ start();
30
-
31
- // 初回で必ず失敗するのであればsetTimeoutを使ってもいいですね
32
-
33
- // setTimeout(start, 100);
34
-
35
- </script>
36
-
37
- </head>
38
26
 
39
27
  ```
28
+
29
+
30
+
31
+ ---
32
+
33
+
34
+
35
+ 追記:また、親ウインドウのスクリプトを以下のように修正してください。
36
+
37
+
38
+
39
+ ```javascript
40
+
41
+ $(function() {
42
+
43
+ $('#frame').on('load', function() {
44
+
45
+ var iframe = this;
46
+
47
+ // iframe の window
48
+
49
+ var iframeWindow = iframe.contentWindow;
50
+
51
+ // iframe の document
52
+
53
+ var iframeDocument = iframeWindow.document;
54
+
55
+ // iframe の document.head
56
+
57
+ var iframeHead = iframeDocument.head;
58
+
59
+
60
+
61
+ // iframeDocument を使って
62
+
63
+ // <link rel="stylesheet" href="./resources/assets/css/jquery-ui.min.css">
64
+
65
+ // をつくって iframeHead に追加する
66
+
67
+ var link = iframeDocument.createElement('link');
68
+
69
+ link.setAttribute('rel', 'stylesheet');
70
+
71
+ link.setAttribute('href', './resources/assets/css/jquery-ui.min.css');
72
+
73
+ iframeHead.appendChild(link);
74
+
75
+
76
+
77
+ // iframeDocument を使って
78
+
79
+ // <script src="./resources/assets/js/jquery.js">
80
+
81
+ // をつくって iframeHead に追加する
82
+
83
+ var script1 = iframeDocument.createElement('script');
84
+
85
+ script1.setAttribute('src', './resources/assets/js/jquery.js');
86
+
87
+ iframeHead.appendChild(script1);
88
+
89
+
90
+
91
+ // iframeDocument を使って
92
+
93
+ // <script src="./resources/assets/js/jquery-ui.min.js">
94
+
95
+ // をつくって iframeHead に追加する
96
+
97
+ var script2 = iframeDocument.createElement('script');
98
+
99
+ script2.setAttribute('src', './resources/assets/js/jquery-ui.min.js');
100
+
101
+ iframeHead.appendChild(script2);
102
+
103
+
104
+
105
+ })
106
+
107
+ });
108
+
109
+ ```
110
+
111
+
112
+
113
+ iframe 内の link や script の要素を生成するのに、親ウインドウにある jQuery($)や document をつかわないのがポイントです。iframe 内の要素は iframe.contentWindow.document を使って生成しないと、データを読み込んでくれません。
114
+
115
+
116
+
117
+ 動くサンプルを作りました。下の方にある loadJquery が親ウインドウのスクリプトにあたります。
118
+
119
+ [https://codepen.io/hoo-chan/pen/PRowQj](https://codepen.io/hoo-chan/pen/PRowQj)
120
+
121
+ IE以外のブラウザでご覧ください。

2

$.uiのチェックを追加しました

2018/03/08 16:46

投稿

退会済みユーザー
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  function start() {
12
12
 
13
- if (window.$) {
13
+ if (window.$ && window.$.ui) {
14
14
 
15
15
  $(document).ready(function(){
16
16
 

1

readyが同期実行で複数回実行されるかもしれないため、$のチェックに変更しました

2018/03/07 23:27

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,4 @@
1
- 失敗したらちょっと待ってもう一度やってるのはいかがでしょうか。
1
+ 必要なのが揃のを待ってから始めようにするのはいかがでしょうか。
2
2
 
3
3
 
4
4
 
@@ -10,7 +10,7 @@
10
10
 
11
11
  function start() {
12
12
 
13
- try {
13
+ if (window.$) {
14
14
 
15
15
  $(document).ready(function(){
16
16
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  });
20
20
 
21
- } catch (error) {
21
+ } else {
22
22
 
23
23
  setTimeout(start, 50);
24
24