You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

898 lines
33 KiB

  1. //
  2. // UniWebViewInterface.cs
  3. // Created by Wang Wei(@onevcat) on 2017-04-11.
  4. //
  5. // This file is a part of UniWebView Project (https://uniwebview.com)
  6. // By purchasing the asset, you are allowed to use this code in as many as projects
  7. // you want, only if you publish the final products under the name of the same account
  8. // used for the purchase.
  9. //
  10. // This asset and all corresponding files (such as source code) are provided on an
  11. // “as is” basis, without warranty of any kind, express of implied, including but not
  12. // limited to the warranties of merchantability, fitness for a particular purpose, and
  13. // noninfringement. In no event shall the authors or copyright holders be liable for any
  14. // claim, damages or other liability, whether in action of contract, tort or otherwise,
  15. // arising from, out of or in connection with the software or the use of other dealing in the software.
  16. //
  17. #if (UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_IOS) && !UNITY_EDITOR_WIN && !UNITY_EDITOR_LINUX
  18. using UnityEngine;
  19. using System;
  20. using System.Runtime.InteropServices;
  21. using AOT;
  22. using System.Reflection;
  23. public class UniWebViewInterface {
  24. private const string StaticListenerName = "UniWebView-static";
  25. static UniWebViewInterface() {
  26. ConnectMessageSender();
  27. RegisterChannel();
  28. }
  29. delegate void UnitySendMessageDelegate(IntPtr objectName, IntPtr methodName, IntPtr parameter);
  30. private const string DllLib =
  31. #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
  32. "UniWebView";
  33. #else
  34. "__Internal";
  35. #endif
  36. private static bool correctPlatform =
  37. #if UNITY_EDITOR_OSX
  38. Application.platform == RuntimePlatform.OSXEditor ||
  39. Application.platform == RuntimePlatform.IPhonePlayer || // Support for Device Simulator package
  40. Application.platform == RuntimePlatform.Android; // Support for Device Simulator package
  41. #elif UNITY_STANDALONE_OSX
  42. Application.platform == RuntimePlatform.OSXPlayer;
  43. #else
  44. Application.platform == RuntimePlatform.IPhonePlayer;
  45. #endif
  46. [DllImport(DllLib)]
  47. private static extern void uv_connectMessageSender(
  48. [MarshalAs(UnmanagedType.FunctionPtr)] UnitySendMessageDelegate sendMessageDelegate
  49. );
  50. static void ConnectMessageSender() {
  51. UniWebViewLogger.Instance.Info("Connecting to native side message sender.");
  52. CheckPlatform();
  53. uv_connectMessageSender(SendMessage);
  54. }
  55. [MonoPInvokeCallback(typeof(UnitySendMessageDelegate))]
  56. private static void SendMessage(IntPtr namePtr, IntPtr methodPtr, IntPtr parameterPtr) {
  57. string name = Marshal.PtrToStringAuto(namePtr);
  58. string method = Marshal.PtrToStringAuto(methodPtr);
  59. string parameters = Marshal.PtrToStringAuto(parameterPtr);
  60. UniWebViewLogger.Instance.Verbose(
  61. "Received message sent from native. Name: " + name + " Method: " + method + " Params: " + parameters
  62. );
  63. if (name == StaticListenerName) {
  64. MethodInfo methodInfo = typeof(UniWebViewStaticListener)
  65. .GetMethod(method, BindingFlags.Static | BindingFlags.Public);
  66. methodInfo.Invoke(null, new object[] { parameters });
  67. return;
  68. }
  69. var listener = UniWebViewNativeListener.GetListener(name);
  70. if (listener) {
  71. MethodInfo methodInfo = typeof(UniWebViewNativeListener).GetMethod(method);
  72. if (methodInfo != null) {
  73. methodInfo.Invoke(listener, new object[] { parameters });
  74. }
  75. }
  76. }
  77. delegate string ChannelMethodDelegate(IntPtr namePtr, IntPtr methodPtr, IntPtr parameterPtr);
  78. [DllImport(DllLib)]
  79. private static extern void uv_registerChannel([MarshalAs(UnmanagedType.FunctionPtr)] ChannelMethodDelegate channel);
  80. public static void RegisterChannel() {
  81. UniWebViewLogger.Instance.Info("Connecting to native side method channel.");
  82. CheckPlatform();
  83. uv_registerChannel(ChannelFunc);
  84. }
  85. [MonoPInvokeCallback(typeof(ChannelMethodDelegate))]
  86. private static string ChannelFunc(IntPtr namePtr, IntPtr methodPtr, IntPtr parameterPtr) {
  87. string name = Marshal.PtrToStringAuto(namePtr);
  88. string method = Marshal.PtrToStringAuto(methodPtr);
  89. string parameters = Marshal.PtrToStringAuto(parameterPtr);
  90. UniWebViewLogger.Instance.Verbose("ChannelFunc invoked by native side. Name: " + name + " Method: "
  91. + method + " Params: " + parameters);
  92. return UniWebViewChannelMethodManager.Instance.InvokeMethod(name, method, parameters);
  93. }
  94. [DllImport(DllLib)]
  95. private static extern void uv_setLogLevel(int level);
  96. public static void SetLogLevel(int level) {
  97. CheckPlatform();
  98. uv_setLogLevel(level);
  99. }
  100. [DllImport(DllLib)]
  101. private static extern void uv_init(string name, int x, int y, int width, int height);
  102. public static void Init(string name, int x, int y, int width, int height) {
  103. CheckPlatform();
  104. if (String.IsNullOrEmpty(name)) {
  105. return;
  106. }
  107. uv_init(name, x, y, width, height);
  108. }
  109. [DllImport(DllLib)]
  110. private static extern void uv_destroy(string name);
  111. public static void Destroy(string name) {
  112. CheckPlatform();
  113. uv_destroy(name);
  114. }
  115. [DllImport(DllLib)]
  116. private static extern void uv_load(string name, string url, bool skipEncoding, string readAccessURL);
  117. public static void Load(string name, string url, bool skipEncoding, string readAccessURL) {
  118. CheckPlatform();
  119. uv_load(name, url, skipEncoding, readAccessURL);
  120. }
  121. [DllImport(DllLib)]
  122. private static extern void uv_loadHTMLString(string name, string html, string baseUrl, bool skipEncoding);
  123. public static void LoadHTMLString(string name, string html, string baseUrl, bool skipEncoding) {
  124. CheckPlatform();
  125. uv_loadHTMLString(name, html, baseUrl, skipEncoding);
  126. }
  127. [DllImport(DllLib)]
  128. private static extern void uv_reload(string name);
  129. public static void Reload(string name) {
  130. CheckPlatform();
  131. uv_reload(name);
  132. }
  133. [DllImport(DllLib)]
  134. private static extern void uv_stop(string name);
  135. public static void Stop(string name) {
  136. CheckPlatform();
  137. uv_stop(name);
  138. }
  139. [DllImport(DllLib)]
  140. private static extern string uv_getUrl(string name);
  141. public static string GetUrl(string name) {
  142. CheckPlatform();
  143. return uv_getUrl(name);
  144. }
  145. [DllImport(DllLib)]
  146. private static extern void uv_setFrame(string name, int x, int y, int width, int height);
  147. public static void SetFrame(string name, int x, int y, int width, int height) {
  148. CheckPlatform();
  149. uv_setFrame(name, x, y, width, height);
  150. }
  151. [DllImport(DllLib)]
  152. private static extern void uv_setPosition(string name, int x, int y);
  153. public static void SetPosition(string name, int x, int y) {
  154. CheckPlatform();
  155. uv_setPosition(name, x, y);
  156. }
  157. [DllImport(DllLib)]
  158. private static extern void uv_setSize(string name, int width, int height);
  159. public static void SetSize(string name, int width, int height) {
  160. CheckPlatform();
  161. uv_setSize(name, width, height);
  162. }
  163. [DllImport(DllLib)]
  164. private static extern bool uv_show(string name, bool fade, int edge, float duration, string identifier);
  165. public static bool Show(string name, bool fade, int edge, float duration, bool useAsync, string identifier) {
  166. CheckPlatform();
  167. return uv_show(name, fade, edge, duration, identifier);
  168. }
  169. [DllImport(DllLib)]
  170. private static extern bool uv_hide(string name, bool fade, int edge, float duration, string identifier);
  171. public static bool Hide(string name, bool fade, int edge, float duration, bool useAsync, string identifier) {
  172. CheckPlatform();
  173. return uv_hide(name, fade, edge, duration, identifier);
  174. }
  175. [DllImport(DllLib)]
  176. private static extern bool uv_animateTo(
  177. string name, int x, int y, int width, int height, float duration, float delay, string identifier
  178. );
  179. public static bool AnimateTo(
  180. string name, int x, int y, int width, int height, float duration, float delay, string identifier)
  181. {
  182. CheckPlatform();
  183. return uv_animateTo(name, x, y, width, height, duration, delay, identifier);
  184. }
  185. [DllImport(DllLib)]
  186. private static extern void uv_addJavaScript(string name, string jsString, string identifier);
  187. public static void AddJavaScript(string name, string jsString, string identifier) {
  188. CheckPlatform();
  189. uv_addJavaScript(name, jsString, identifier);
  190. }
  191. [DllImport(DllLib)]
  192. private static extern void uv_evaluateJavaScript(string name, string jsString, string identifier);
  193. public static void EvaluateJavaScript(string name, string jsString, string identifier) {
  194. CheckPlatform();
  195. uv_evaluateJavaScript(name, jsString, identifier);
  196. }
  197. [DllImport(DllLib)]
  198. private static extern void uv_addUrlScheme(string name, string scheme);
  199. public static void AddUrlScheme(string name, string scheme) {
  200. CheckPlatform();
  201. uv_addUrlScheme(name, scheme);
  202. }
  203. [DllImport(DllLib)]
  204. private static extern void uv_removeUrlScheme(string name, string scheme);
  205. public static void RemoveUrlScheme(string name, string scheme) {
  206. CheckPlatform();
  207. uv_removeUrlScheme(name, scheme);
  208. }
  209. [DllImport(DllLib)]
  210. private static extern void uv_addSslExceptionDomain(string name, string domain);
  211. public static void AddSslExceptionDomain(string name, string domain) {
  212. CheckPlatform();
  213. uv_addSslExceptionDomain(name, domain);
  214. }
  215. [DllImport(DllLib)]
  216. private static extern void uv_removeSslExceptionDomain(string name, string domain);
  217. public static void RemoveSslExceptionDomain(string name, string domain) {
  218. CheckPlatform();
  219. uv_removeSslExceptionDomain(name, domain);
  220. }
  221. [DllImport(DllLib)]
  222. private static extern void uv_setHeaderField(string name, string key, string value);
  223. public static void SetHeaderField(string name, string key, string value) {
  224. CheckPlatform();
  225. uv_setHeaderField(name, key, value);
  226. }
  227. [DllImport(DllLib)]
  228. private static extern void uv_setUserAgent(string name, string userAgent);
  229. public static void SetUserAgent(string name, string userAgent) {
  230. CheckPlatform();
  231. uv_setUserAgent(name, userAgent);
  232. }
  233. [DllImport(DllLib)]
  234. private static extern string uv_getUserAgent(string name);
  235. public static string GetUserAgent(string name) {
  236. CheckPlatform();
  237. return uv_getUserAgent(name);
  238. }
  239. [DllImport(DllLib)]
  240. private static extern void uv_setContentInsetAdjustmentBehavior(string name, int behavior);
  241. public static void SetContentInsetAdjustmentBehavior(
  242. string name, UniWebViewContentInsetAdjustmentBehavior behavior
  243. )
  244. {
  245. CheckPlatform();
  246. uv_setContentInsetAdjustmentBehavior(name, (int)behavior);
  247. }
  248. [DllImport(DllLib)]
  249. private static extern void uv_setAllowAutoPlay(bool flag);
  250. public static void SetAllowAutoPlay(bool flag) {
  251. CheckPlatform();
  252. uv_setAllowAutoPlay(flag);
  253. }
  254. [DllImport(DllLib)]
  255. private static extern void uv_setAllowInlinePlay(bool flag);
  256. public static void SetAllowInlinePlay(bool flag) {
  257. CheckPlatform();
  258. uv_setAllowInlinePlay(flag);
  259. }
  260. [DllImport(DllLib)]
  261. private static extern void uv_setAllowFileAccess(string name, bool flag);
  262. public static void SetAllowFileAccess(string name, bool flag) {
  263. CheckPlatform();
  264. uv_setAllowFileAccess(name, flag);
  265. }
  266. [DllImport(DllLib)]
  267. private static extern void uv_setAllowFileAccessFromFileURLs(string name, bool flag);
  268. public static void SetAllowFileAccessFromFileURLs(string name, bool flag) {
  269. CheckPlatform();
  270. uv_setAllowFileAccessFromFileURLs(name, flag);
  271. }
  272. [DllImport(DllLib)]
  273. private static extern void uv_setAllowUniversalAccessFromFileURLs(bool flag);
  274. public static void SetAllowUniversalAccessFromFileURLs(bool flag) {
  275. CheckPlatform();
  276. uv_setAllowUniversalAccessFromFileURLs(flag);
  277. }
  278. [DllImport(DllLib)]
  279. private static extern void uv_setForwardWebConsoleToNativeOutput(bool flag);
  280. public static void SetForwardWebConsoleToNativeOutput(bool flag) {
  281. CheckPlatform();
  282. uv_setForwardWebConsoleToNativeOutput(flag);
  283. }
  284. [DllImport(DllLib)]
  285. private static extern void uv_setAllowJavaScriptOpenWindow(bool flag);
  286. public static void SetAllowJavaScriptOpenWindow(bool flag) {
  287. CheckPlatform();
  288. uv_setAllowJavaScriptOpenWindow(flag);
  289. }
  290. [DllImport(DllLib)]
  291. private static extern void uv_setJavaScriptEnabled(bool flag);
  292. public static void SetJavaScriptEnabled(bool flag) {
  293. CheckPlatform();
  294. uv_setJavaScriptEnabled(flag);
  295. }
  296. [DllImport(DllLib)]
  297. private static extern void uv_setLimitsNavigationsToAppBoundDomains(bool flag);
  298. public static void SetLimitsNavigationsToAppBoundDomains(bool flag) {
  299. CheckPlatform();
  300. uv_setLimitsNavigationsToAppBoundDomains(flag);
  301. }
  302. [DllImport(DllLib)]
  303. private static extern void uv_cleanCache(string name);
  304. public static void CleanCache(string name) {
  305. CheckPlatform();
  306. uv_cleanCache(name);
  307. }
  308. [DllImport(DllLib)]
  309. private static extern void uv_setCacheMode(string name, int mode);
  310. public static void SetCacheMode(string name, int mode) {
  311. CheckPlatform();
  312. uv_setCacheMode(name, mode);
  313. }
  314. [DllImport(DllLib)]
  315. private static extern void uv_clearCookies();
  316. public static void ClearCookies() {
  317. CheckPlatform();
  318. uv_clearCookies();
  319. }
  320. [DllImport(DllLib)]
  321. private static extern void uv_setCookie(string url, string cookie, bool skipEncoding);
  322. public static void SetCookie(string url, string cookie, bool skipEncoding) {
  323. CheckPlatform();
  324. uv_setCookie(url, cookie, skipEncoding);
  325. }
  326. [DllImport(DllLib)]
  327. private static extern void uv_removeCookies(string url, bool skipEncoding);
  328. public static void RemoveCookies(string url, bool skipEncoding) {
  329. CheckPlatform();
  330. uv_removeCookies(url, skipEncoding);
  331. }
  332. [DllImport(DllLib)]
  333. private static extern void uv_removeCookie(string url, string key, bool skipEncoding);
  334. public static void RemoveCookie(string url, string key, bool skipEncoding) {
  335. CheckPlatform();
  336. uv_removeCookie(url, key, skipEncoding);
  337. }
  338. [DllImport(DllLib)]
  339. private static extern string uv_getCookie(string url, string key, bool skipEncoding);
  340. public static string GetCookie(string url, string key, bool skipEncoding) {
  341. CheckPlatform();
  342. return uv_getCookie(url, key, skipEncoding);
  343. }
  344. [DllImport(DllLib)]
  345. private static extern void uv_clearHttpAuthUsernamePasswordHost(string host, string realm);
  346. public static void ClearHttpAuthUsernamePassword(string host, string realm) {
  347. CheckPlatform();
  348. uv_clearHttpAuthUsernamePasswordHost(host, realm);
  349. }
  350. [DllImport(DllLib)]
  351. private static extern void uv_setBackgroundColor(string name, float r, float g, float b, float a);
  352. public static void SetBackgroundColor(string name, float r, float g, float b, float a) {
  353. CheckPlatform();
  354. uv_setBackgroundColor(name, r, g, b, a);
  355. }
  356. [DllImport(DllLib)]
  357. private static extern void uv_setWebViewAlpha(string name, float alpha);
  358. public static void SetWebViewAlpha(string name, float alpha) {
  359. CheckPlatform();
  360. uv_setWebViewAlpha(name, alpha);
  361. }
  362. [DllImport(DllLib)]
  363. private static extern float uv_getWebViewAlpha(string name);
  364. public static float GetWebViewAlpha(string name) {
  365. CheckPlatform();
  366. return uv_getWebViewAlpha(name);
  367. }
  368. [DllImport(DllLib)]
  369. private static extern void uv_setShowSpinnerWhileLoading(string name, bool show);
  370. public static void SetShowSpinnerWhileLoading(string name, bool show) {
  371. CheckPlatform();
  372. uv_setShowSpinnerWhileLoading(name, show);
  373. }
  374. [DllImport(DllLib)]
  375. private static extern void uv_setSpinnerText(string name, string text);
  376. public static void SetSpinnerText(string name, string text) {
  377. CheckPlatform();
  378. uv_setSpinnerText(name, text);
  379. }
  380. [DllImport(DllLib)]
  381. private static extern void uv_setAllowUserDismissSpinnerByGesture(string name, bool flag);
  382. public static void SetAllowUserDismissSpinnerByGesture(string name, bool flag) {
  383. CheckPlatform();
  384. uv_setAllowUserDismissSpinnerByGesture(name, flag);
  385. }
  386. [DllImport(DllLib)]
  387. private static extern void uv_showSpinner(string name);
  388. public static void ShowSpinner(string name) {
  389. CheckPlatform();
  390. uv_showSpinner(name);
  391. }
  392. [DllImport(DllLib)]
  393. private static extern void uv_hideSpinner(string name);
  394. public static void HideSpinner(string name) {
  395. CheckPlatform();
  396. uv_hideSpinner(name);
  397. }
  398. [DllImport(DllLib)]
  399. private static extern bool uv_canGoBack(string name);
  400. public static bool CanGoBack(string name) {
  401. CheckPlatform();
  402. return uv_canGoBack(name);
  403. }
  404. [DllImport(DllLib)]
  405. private static extern bool uv_canGoForward(string name);
  406. public static bool CanGoForward(string name) {
  407. CheckPlatform();
  408. return uv_canGoForward(name);
  409. }
  410. [DllImport(DllLib)]
  411. private static extern void uv_goBack(string name);
  412. public static void GoBack(string name) {
  413. CheckPlatform();
  414. uv_goBack(name);
  415. }
  416. [DllImport(DllLib)]
  417. private static extern void uv_goForward(string name);
  418. public static void GoForward(string name) {
  419. CheckPlatform();
  420. uv_goForward(name);
  421. }
  422. [DllImport(DllLib)]
  423. private static extern void uv_setOpenLinksInExternalBrowser(string name, bool flag);
  424. public static void SetOpenLinksInExternalBrowser(string name, bool flag) {
  425. CheckPlatform();
  426. uv_setOpenLinksInExternalBrowser(name, flag);
  427. }
  428. [DllImport(DllLib)]
  429. private static extern void uv_setHorizontalScrollBarEnabled(string name, bool enabled);
  430. public static void SetHorizontalScrollBarEnabled(string name, bool enabled) {
  431. CheckPlatform();
  432. uv_setHorizontalScrollBarEnabled(name, enabled);
  433. }
  434. [DllImport(DllLib)]
  435. private static extern void uv_setVerticalScrollBarEnabled(string name, bool enabled);
  436. public static void SetVerticalScrollBarEnabled(string name, bool enabled) {
  437. CheckPlatform();
  438. uv_setVerticalScrollBarEnabled(name, enabled);
  439. }
  440. [DllImport(DllLib)]
  441. private static extern void uv_setBouncesEnabled(string name, bool enabled);
  442. public static void SetBouncesEnabled(string name, bool enabled) {
  443. CheckPlatform();
  444. uv_setBouncesEnabled(name, enabled);
  445. }
  446. [DllImport(DllLib)]
  447. private static extern void uv_setZoomEnabled(string name, bool enabled);
  448. public static void SetZoomEnabled(string name, bool enabled) {
  449. CheckPlatform();
  450. uv_setZoomEnabled(name, enabled);
  451. }
  452. [DllImport(DllLib)]
  453. private static extern void uv_setWindowUserResizeEnabled(string name, bool enabled);
  454. public static void SetWindowUserResizeEnabled(string name, bool enabled) {
  455. CheckPlatform();
  456. uv_setWindowUserResizeEnabled(name, enabled);
  457. }
  458. [DllImport(DllLib)]
  459. private static extern void uv_setUserInteractionEnabled(string name, bool enabled);
  460. public static void SetUserInteractionEnabled(string name, bool enabled) {
  461. CheckPlatform();
  462. uv_setUserInteractionEnabled(name, enabled);
  463. }
  464. [DllImport(DllLib)]
  465. private static extern void uv_setTransparencyClickingThroughEnabled(string name, bool enabled);
  466. public static void SetTransparencyClickingThroughEnabled(string name, bool enabled) {
  467. CheckPlatform();
  468. uv_setTransparencyClickingThroughEnabled(name, enabled);
  469. }
  470. [DllImport(DllLib)]
  471. private static extern void uv_setWebContentsDebuggingEnabled(bool enabled);
  472. public static void SetWebContentsDebuggingEnabled(bool enabled) {
  473. CheckPlatform();
  474. uv_setWebContentsDebuggingEnabled(enabled);
  475. }
  476. [DllImport(DllLib)]
  477. private static extern void uv_setAllowBackForwardNavigationGestures(string name, bool flag);
  478. public static void SetAllowBackForwardNavigationGestures(string name, bool flag) {
  479. CheckPlatform();
  480. uv_setAllowBackForwardNavigationGestures(name, flag);
  481. }
  482. [DllImport(DllLib)]
  483. private static extern void uv_setAllowHTTPAuthPopUpWindow(string name, bool flag);
  484. public static void SetAllowHTTPAuthPopUpWindow(string name, bool flag) {
  485. CheckPlatform();
  486. uv_setAllowHTTPAuthPopUpWindow(name, flag);
  487. }
  488. [DllImport(DllLib)]
  489. private static extern void uv_print(string name);
  490. public static void Print(string name) {
  491. CheckPlatform();
  492. uv_print(name);
  493. }
  494. [DllImport(DllLib)]
  495. private static extern void uv_captureSnapshot(string name, string fileName);
  496. public static void CaptureSnapshot(string name, string fileName) {
  497. CheckPlatform();
  498. uv_captureSnapshot(name, fileName);
  499. }
  500. [DllImport(DllLib)]
  501. private static extern void uv_scrollTo(string name, int x, int y, bool animated);
  502. public static void ScrollTo(string name, int x, int y, bool animated) {
  503. CheckPlatform();
  504. uv_scrollTo(name, x, y, animated);
  505. }
  506. [DllImport(DllLib)]
  507. private static extern void uv_setCalloutEnabled(string name, bool flag);
  508. public static void SetCalloutEnabled(string name, bool flag) {
  509. CheckPlatform();
  510. uv_setCalloutEnabled(name, flag);
  511. }
  512. [DllImport(DllLib)]
  513. private static extern void uv_setSupportMultipleWindows(string name, bool enabled, bool allowJavaScriptOpening);
  514. public static void SetSupportMultipleWindows(string name, bool enabled, bool allowJavaScriptOpening) {
  515. CheckPlatform();
  516. uv_setSupportMultipleWindows(name, enabled, allowJavaScriptOpening);
  517. }
  518. [DllImport(DllLib)]
  519. private static extern void uv_setDragInteractionEnabled(string name, bool flag);
  520. public static void SetDragInteractionEnabled(string name, bool flag) {
  521. CheckPlatform();
  522. uv_setDragInteractionEnabled(name, flag);
  523. }
  524. [DllImport(DllLib)]
  525. private static extern float uv_nativeScreenWidth();
  526. public static float NativeScreenWidth() {
  527. #if UNITY_EDITOR_OSX
  528. return Screen.width;
  529. #else
  530. return uv_nativeScreenWidth();
  531. #endif
  532. }
  533. [DllImport(DllLib)]
  534. private static extern float uv_nativeScreenHeight();
  535. public static float NativeScreenHeight() {
  536. #if UNITY_EDITOR_OSX
  537. return Screen.height;
  538. #else
  539. return uv_nativeScreenHeight();
  540. #endif
  541. }
  542. [DllImport(DllLib)]
  543. private static extern void uv_addDownloadURL(string name, string urlString, int type);
  544. public static void AddDownloadURL(string name, string urlString, int type) {
  545. CheckPlatform();
  546. uv_addDownloadURL(name, urlString, type);
  547. }
  548. [DllImport(DllLib)]
  549. private static extern void uv_removeDownloadURL(string name, string urlString, int type);
  550. public static void RemoveDownloadURL(string name, string urlString, int type) {
  551. CheckPlatform();
  552. uv_removeDownloadURL(name, urlString, type);
  553. }
  554. [DllImport(DllLib)]
  555. private static extern void uv_addDownloadMIMEType(string name, string MIMEType, int type);
  556. public static void AddDownloadMIMEType(string name, string MIMEType, int type) {
  557. CheckPlatform();
  558. uv_addDownloadMIMEType(name, MIMEType, type);
  559. }
  560. [DllImport(DllLib)]
  561. private static extern void uv_removeDownloadMIMETypes(string name, string MIMEType, int type);
  562. public static void RemoveDownloadMIMETypes(string name, string MIMEType, int type) {
  563. CheckPlatform();
  564. uv_removeDownloadMIMETypes(name, MIMEType, type);
  565. }
  566. [DllImport(DllLib)]
  567. private static extern void uv_setAllowUserEditFileNameBeforeDownloading(string name, bool allowed);
  568. public static void SetAllowUserEditFileNameBeforeDownloading(string name, bool allowed) {
  569. CheckPlatform();
  570. uv_setAllowUserEditFileNameBeforeDownloading(name, allowed);
  571. }
  572. [DllImport(DllLib)]
  573. private static extern void uv_setAllowUserChooseActionAfterDownloading(string name, bool allowed);
  574. public static void SetAllowUserChooseActionAfterDownloading(string name, bool allowed) {
  575. CheckPlatform();
  576. uv_setAllowUserChooseActionAfterDownloading(name, allowed);
  577. }
  578. [DllImport(DllLib)]
  579. private static extern void uv_safeBrowsingInit(string name, string url);
  580. public static void SafeBrowsingInit(string name, string url) {
  581. CheckPlatform();
  582. if (String.IsNullOrEmpty(name)) {
  583. return;
  584. }
  585. uv_safeBrowsingInit(name, url);
  586. }
  587. [DllImport(DllLib)]
  588. private static extern void uv_safeBrowsingShow(string name);
  589. public static void SafeBrowsingShow(string name) {
  590. CheckPlatform();
  591. uv_safeBrowsingShow(name);
  592. }
  593. [DllImport(DllLib)]
  594. private static extern void uv_safeBrowsingSetToolbarColor(string name, float r, float g, float b);
  595. public static void SafeBrowsingSetToolbarColor(string name, float r, float g, float b) {
  596. CheckPlatform();
  597. uv_safeBrowsingSetToolbarColor(name, r, g, b);
  598. }
  599. [DllImport(DllLib)]
  600. private static extern void uv_safeBrowsingSetToolbarItemColor(string name, float r, float g, float b);
  601. public static void SafeBrowsingSetToolbarItemColor(string name, float r, float g, float b) {
  602. CheckPlatform();
  603. uv_safeBrowsingSetToolbarItemColor(name, r, g, b);
  604. }
  605. [DllImport(DllLib)]
  606. private static extern void uv_safeBrowsingDismiss(string name);
  607. public static void SafeBrowsingDismiss(string name) {
  608. CheckPlatform();
  609. uv_safeBrowsingDismiss(name);
  610. }
  611. [DllImport(DllLib)]
  612. private static extern bool uv_authenticationIsSupported();
  613. public static bool IsAuthenticationIsSupported() {
  614. CheckPlatform();
  615. return uv_authenticationIsSupported();
  616. }
  617. [DllImport(DllLib)]
  618. private static extern void uv_authenticationInit(string name, string url, string scheme);
  619. public static void AuthenticationInit(string name, string url, string scheme) {
  620. CheckPlatform();
  621. uv_authenticationInit(name, url, scheme);
  622. }
  623. [DllImport(DllLib)]
  624. private static extern void uv_authenticationStart(string name);
  625. public static void AuthenticationStart(string name) {
  626. CheckPlatform();
  627. uv_authenticationStart(name);
  628. }
  629. [DllImport(DllLib)]
  630. private static extern void uv_authenticationSetPrivateMode(string name, bool flag);
  631. public static void AuthenticationSetPrivateMode(string name, bool flag) {
  632. CheckPlatform();
  633. uv_authenticationSetPrivateMode(name, flag);
  634. }
  635. [DllImport(DllLib)]
  636. private static extern void uv_setShowEmbeddedToolbar(string name, bool show);
  637. public static void SetShowEmbeddedToolbar(string name, bool show) {
  638. CheckPlatform();
  639. uv_setShowEmbeddedToolbar(name, show);
  640. }
  641. [DllImport(DllLib)]
  642. private static extern void uv_setEmbeddedToolbarOnTop(string name, bool top);
  643. public static void SetEmbeddedToolbarOnTop(string name, bool top) {
  644. CheckPlatform();
  645. uv_setEmbeddedToolbarOnTop(name, top);
  646. }
  647. [DllImport(DllLib)]
  648. private static extern void uv_setEmbeddedToolbarDoneButtonText(string name, string text);
  649. public static void SetEmbeddedToolbarDoneButtonText(string name, string text) {
  650. CheckPlatform();
  651. uv_setEmbeddedToolbarDoneButtonText(name, text);
  652. }
  653. [DllImport(DllLib)]
  654. private static extern void uv_setEmbeddedToolbarGoBackButtonText(string name, string text);
  655. public static void SetEmbeddedToolbarGoBackButtonText(string name, string text) {
  656. CheckPlatform();
  657. uv_setEmbeddedToolbarGoBackButtonText(name, text);
  658. }
  659. [DllImport(DllLib)]
  660. private static extern void uv_setEmbeddedToolbarGoForwardButtonText(string name, string text);
  661. public static void SetEmbeddedToolbarGoForwardButtonText(string name, string text) {
  662. CheckPlatform();
  663. uv_setEmbeddedToolbarGoForwardButtonText(name, text);
  664. }
  665. [DllImport(DllLib)]
  666. private static extern void uv_setEmbeddedToolbarTitleText(string name, string text);
  667. public static void SetEmbeddedToolbarTitleText(string name, string text) {
  668. CheckPlatform();
  669. uv_setEmbeddedToolbarTitleText(name, text);
  670. }
  671. [DllImport(DllLib)]
  672. private static extern void uv_setEmbeddedToolbarBackgroundColor(string name, float r, float g, float b, float a);
  673. public static void SetEmbeddedToolbarBackgroundColor(string name, Color color) {
  674. CheckPlatform();
  675. uv_setEmbeddedToolbarBackgroundColor(name, color.r, color.g, color.b, color.a);
  676. }
  677. [DllImport(DllLib)]
  678. private static extern void uv_setEmbeddedToolbarButtonTextColor(string name, float r, float g, float b, float a);
  679. public static void SetEmbeddedToolbarButtonTextColor(string name, Color color) {
  680. CheckPlatform();
  681. uv_setEmbeddedToolbarButtonTextColor(name, color.r, color.g, color.b, color.a);
  682. }
  683. [DllImport(DllLib)]
  684. private static extern void uv_setEmbeddedToolbarTitleTextColor(string name, float r, float g, float b, float a);
  685. public static void SetEmbeddedToolbarTitleTextColor(string name, Color color) {
  686. CheckPlatform();
  687. uv_setEmbeddedToolbarTitleTextColor(name, color.r, color.g, color.b, color.a);
  688. }
  689. [DllImport(DllLib)]
  690. private static extern void uv_setEmbeddedToolbarNavigationButtonsShow(string name, bool show);
  691. public static void SetEmeddedToolbarNavigationButtonsShow(string name, bool show) {
  692. CheckPlatform();
  693. uv_setEmbeddedToolbarNavigationButtonsShow(name, show);
  694. }
  695. [DllImport(DllLib)]
  696. private static extern void uv_startSnapshotForRendering(string name, string identifier);
  697. public static void StartSnapshotForRendering(string name, string identifier) {
  698. CheckPlatform();
  699. uv_startSnapshotForRendering(name, identifier);
  700. }
  701. [DllImport(DllLib)]
  702. private static extern void uv_stopSnapshotForRendering(string name);
  703. public static void StopSnapshotForRendering(string name) {
  704. CheckPlatform();
  705. uv_stopSnapshotForRendering(name);
  706. }
  707. [DllImport(DllLib)]
  708. private static extern IntPtr uv_getRenderedData(string name, int x, int y, int width, int height, out int length);
  709. public static byte[] GetRenderedData(string name, int x, int y, int width, int height) {
  710. CheckPlatform();
  711. IntPtr dataPtr = uv_getRenderedData(name, x, y, width, height, out var length);
  712. byte[] managedData = new byte[length];
  713. Marshal.Copy(dataPtr, managedData, 0, length);
  714. return managedData;
  715. }
  716. #region Deprecated
  717. [DllImport(DllLib)]
  718. private static extern void uv_setShowToolbar(string name, bool show, bool animated, bool onTop, bool adjustInset);
  719. public static void SetShowToolbar(string name, bool show, bool animated, bool onTop, bool adjustInset) {
  720. CheckPlatform();
  721. uv_setShowToolbar(name, show, animated, onTop, adjustInset);
  722. }
  723. [DllImport(DllLib)]
  724. private static extern void uv_setShowToolbarNavigationButtons(string name, bool show);
  725. public static void SetShowToolbarNavigationButtons(string name, bool show) {
  726. CheckPlatform();
  727. uv_setShowToolbarNavigationButtons(name, show);
  728. }
  729. [DllImport(DllLib)]
  730. private static extern void uv_setToolbarDoneButtonText(string name, string text);
  731. public static void SetToolbarDoneButtonText(string name, string text) {
  732. CheckPlatform();
  733. uv_setToolbarDoneButtonText(name, text);
  734. }
  735. [DllImport(DllLib)]
  736. private static extern void uv_setGoBackButtonText(string name, string text);
  737. public static void SetToolbarGoBackButtonText(string name, string text) {
  738. CheckPlatform();
  739. uv_setGoBackButtonText(name, text);
  740. }
  741. [DllImport(DllLib)]
  742. private static extern void uv_setGoForwardButtonText(string name, string text);
  743. public static void SetToolbarGoForwardButtonText(string name, string text) {
  744. CheckPlatform();
  745. uv_setGoForwardButtonText(name, text);
  746. }
  747. [DllImport(DllLib)]
  748. private static extern void uv_setToolbarTintColor(string name, float r, float g, float b);
  749. public static void SetToolbarTintColor(string name, float r, float g, float b) {
  750. CheckPlatform();
  751. uv_setToolbarTintColor(name, r, g, b);
  752. }
  753. [DllImport(DllLib)]
  754. private static extern void uv_setToolbarTextColor(string name, float r, float g, float b);
  755. public static void SetToolbarTextColor(string name, float r, float g, float b) {
  756. CheckPlatform();
  757. uv_setToolbarTextColor(name, r, g, b);
  758. }
  759. #endregion
  760. public static void CheckPlatform() {
  761. if (!correctPlatform) {
  762. throw new System.InvalidOperationException(
  763. "Method can only be performed on correct platform. Current: " + Application.platform
  764. );
  765. }
  766. }
  767. }
  768. #endif