質問編集履歴

2

解決方法の提示

2018/03/24 12:28

投稿

lackLucky
lackLucky

スコア7

test CHANGED
File without changes
test CHANGED
@@ -68,7 +68,7 @@
68
68
 
69
69
 
70
70
 
71
- ### 改良後のソースコード(2018/03/24 13:00追記)
71
+ ###改良後のソースコード(2018/03/24 13:00追記)
72
72
 
73
73
  ruccho 様より戴いた回答を元にソースコードを修正しました。
74
74
 
@@ -153,3 +153,67 @@
153
153
  個別にポップアップを許可すればツイートが可能ですが、できればポップアップブロック無しで投稿できるようにしたいところです。
154
154
 
155
155
  引き続き、ポップアップブロックを回避する方法についてご教授戴けることを願います。
156
+
157
+
158
+
159
+ ###ポップアップブロック対策の解決(2018/03/24 21:30追記)
160
+
161
+
162
+
163
+ UnityC#スクリプトで実行しようとした場合、メソッドの実行が1フレーム遅れるため、「ユーザの意図しない動作によるポップアップ」に該当するためブロックされます。
164
+
165
+ これを回避するには「ユーザが入力した動作によるポップアップ」と判断させる必要があると参考文献にありました。
166
+
167
+ 参考:https://goonytoons.com/blog/index.php/2017/04/06/unity-webgl-stuck-points/
168
+
169
+
170
+
171
+ これを回避するために用意したコードがこちらです。
172
+
173
+
174
+
175
+ ```JS
176
+
177
+ var TwitterPlugin = {
178
+
179
+
180
+
181
+ //指定されたURLを開くJavascript
182
+
183
+ OpenNewWindow: function(openUrl){
184
+
185
+ //引数の定義
186
+
187
+ var url = Pointer_stringify(openUrl);
188
+
189
+
190
+
191
+ document.onmousedown = function(){
192
+
193
+ window.open(url);
194
+
195
+ document.onmousedown = null;
196
+
197
+ }
198
+
199
+ }
200
+
201
+ };
202
+
203
+
204
+
205
+ mergeInto(LibraryManager.library, TwitterPlugin);
206
+
207
+ ```
208
+
209
+
210
+
211
+ このような形でJavaScriptを実装すると「マウスクリックして押し込んだ瞬間」の動作を登録することができます。
212
+
213
+ このコードを実行したあとにマウスをクリックするとポップアップブロックを回避して実行できました。
214
+
215
+
216
+
217
+ あとはこのコードをマウスクリックする動作の直前(GUIボタンにカーソルを合わせたとき)などで実行することで、擬似的なTwitter投稿ボタンが実装できるハズと考えております。
218
+
219
+ ご助言戴き感謝致します、ありがとうございました。

1

ruccho様から戴いた回答を元に追記

2018/03/24 12:28

投稿

lackLucky
lackLucky

スコア7

test CHANGED
File without changes
test CHANGED
@@ -65,3 +65,91 @@
65
65
 
66
66
 
67
67
  Unity2017.3以降のバージョンで「別窓でブラウザを開くことができる」代替関数、もしくは機能を探しています。ご助言戴けると痛み入ります。
68
+
69
+
70
+
71
+ ### 改良後のソースコード(2018/03/24 13:00追記)
72
+
73
+ ruccho 様より戴いた回答を元にソースコードを修正しました。
74
+
75
+
76
+
77
+ ファイル構造:/Assets/Plugins/WebGL/TwitterPlugin.jslib
78
+
79
+ ```JS
80
+
81
+ var TwitterPlugin = {
82
+
83
+
84
+
85
+ //指定されたURLを開くJavascript
86
+
87
+ OpenNewWindow: function(openUrl){
88
+
89
+ //引数の定義
90
+
91
+ var url = Pointer_stringify(openUrl);
92
+
93
+
94
+
95
+ //名前を指定して新しいウィンドウを開く
96
+
97
+ window.open(url, "TweetWindow");
98
+
99
+ }
100
+
101
+ };
102
+
103
+
104
+
105
+ mergeInto(LibraryManager.library, TwitterPlugin);
106
+
107
+ ```
108
+
109
+
110
+
111
+ ```C#
112
+
113
+ using System.Collections;
114
+
115
+ using System.Collections.Generic;
116
+
117
+ using UnityEngine;
118
+
119
+ using System.Runtime.InteropServices;
120
+
121
+
122
+
123
+ public class TweetController : MonoBehaviour {
124
+
125
+
126
+
127
+ //JS関数の呼び出し
128
+
129
+ [DllImport("__Internal")] private static extern void OpenNewWindow(string url);
130
+
131
+
132
+
133
+ void Update () {
134
+
135
+ if(Input.GetKeyDown(KeyCode.A)){
136
+
137
+ OpenNewWindow("http://twitter.com/intent/tweet?text=" + WWW.EscapeURL("てすと" + "#Unity"));
138
+
139
+ }
140
+
141
+ }
142
+
143
+ }
144
+
145
+ ```
146
+
147
+
148
+
149
+ このコードはUnity上で動作確認するとライブラリ未登録エラー(EntryPointNotFoundException: OpenNewWindow)が出ましたが、ビルドしてブラウザ上で実行したところ、問題なく動作確認しました。
150
+
151
+ しかし、window.Openを用いた方法ではウェブブラウザのポップアップブロック機能に引っかかってしまうようです。
152
+
153
+ 個別にポップアップを許可すればツイートが可能ですが、できればポップアップブロック無しで投稿できるようにしたいところです。
154
+
155
+ 引き続き、ポップアップブロックを回避する方法についてご教授戴けることを願います。