项目作者: lyzz0612

项目描述 :
cocos webview在windows和mac平台上的适配
高级语言: C++
项目地址: git://github.com/lyzz0612/cocos_desktop_webview.git
创建时间: 2020-02-13T03:18:42Z
项目社区:https://github.com/lyzz0612/cocos_desktop_webview

开源协议:

下载


cocos-desktop-webview

cocos UIWebView在windows和mac平台上的适配

环境配置

  1. source文件夹下为新增文件,按路径拷贝到响应位置,并加到对应工程项目中。
  2. mac项目需要在主工程和cocos工程中添加WebKit.framework依赖
  3. 在相关的平台判断中,加入新增的两个平台,包括以下几个文件

    • UIWebView.h
    1. //old
    2. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_TIZEN) && !defined(CC_PLATFORM_OS_TVOS)
    3. //new
    4. #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 || CC_TARGET_PLATFORM == CC_PLATFORM_MAC || CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_TIZEN) && !defined(CC_PLATFORM_OS_TVOS)
    • UIWebView.cpp

    ```
    //old

    if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_TIZEN)

    include “ui/UIWebViewImpl-android.h”

    include “ui/UIWebView-inl.h”

    endif

    //new

    if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_TIZEN)

    include “ui/UIWebViewImpl-android.h”

    include “ui/UIWebView-inl.h”

elif (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

include “ui/UIWebViewImpl-win32.h”

include “ui/UIWebView-inl.h”

endif

  1. * `UIWebView.mm`

//old

if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS) && !defined(CC_PLATFORM_OS_TVOS)

//new

if (CC_TARGET_PLATFORM == CC_PLATFORM_MAC || CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS) && !defined(CC_PLATFORM_OS_TVOS)

  1. * `CocosGUI.h`

//old

if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_TIZEN)

include “ui/UIWebView.h”

endif

//new

if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 || CC_TARGET_PLATFORM == CC_PLATFORM_MAC || CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_TIZEN)

include “ui/UIWebView.h”

endif

  1. 3. 脚本导出
  2. lua为例,也是在相关文件判断中添加平台,包括以下文件
  3. * `scripting/lua-bindings/auto/lua_cocos2dx_experimental_webview_auto.cpp`
  4. * `scripting/lua-bindings/auto/lua_cocos2dx_experimental_webview_auto.hpp`
  5. * `scripting/lua-bindings/manual/ui/lua_cocos2dx_experimental_webview_manual.cpp`
  6. * `scripting/lua-bindings/manual/ui/lua_cocos2dx_experimental_webview_manual.hpp`
  7. * `scripting/lua-bindings/manual/ui/lua_cocos2dx_ui_manual.cpp`
  1. //old
  2. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS) && !defined(CC_TARGET_OS_TVOS)
  3. #include "scripting/lua-bindings/auto/lua_cocos2dx_experimental_video_auto.hpp"
  4. #include "scripting/lua-bindings/manual/ui/lua_cocos2dx_experimental_video_manual.hpp"
  5. #include "scripting/lua-bindings/auto/lua_cocos2dx_experimental_webview_auto.hpp"
  6. #include "scripting/lua-bindings/manual/ui/lua_cocos2dx_experimental_webview_manual.hpp"
  7. #endif
  8. //new
  9. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS) && !defined(CC_TARGET_OS_TVOS)
  10. #include "scripting/lua-bindings/auto/lua_cocos2dx_experimental_video_auto.hpp"
  11. #include "scripting/lua-bindings/manual/ui/lua_cocos2dx_experimental_video_manual.hpp"
  12. #endif
  13. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 || CC_TARGET_PLATFORM == CC_PLATFORM_MAC) && !defined(CC_TARGET_OS_TVOS)
  14. #include "scripting/lua-bindings/auto/lua_cocos2dx_experimental_webview_auto.hpp"
  15. #include "scripting/lua-bindings/manual/ui/lua_cocos2dx_experimental_webview_manual.hpp"
  16. #endif
  17. ```
  18. ```
  19. //old
  20. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS) && !defined(CC_TARGET_OS_TVOS)
  21. register_all_cocos2dx_experimental_video(L);
  22. register_all_cocos2dx_experimental_video_manual(L);
  23. register_all_cocos2dx_experimental_webview(L);
  24. register_all_cocos2dx_experimental_webview_manual(L);
  25. #endif
  26. //new
  27. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS) && !defined(CC_TARGET_OS_TVOS)
  28. register_all_cocos2dx_experimental_video(L);
  29. register_all_cocos2dx_experimental_video_manual(L);
  30. #endif
  31. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 || CC_TARGET_PLATFORM == CC_PLATFORM_MAC) && !defined(CC_TARGET_OS_TVOS)
  32. register_all_cocos2dx_experimental_webview(L);
  33. register_all_cocos2dx_experimental_webview_manual(L);
  34. #endif
  35. ```

常见问题

  1. Mac打不开https网址:Info.plist中添加NSAppTransportSecurity配置,参考苹果文档翻译 iOS10 NSAppTransportSecurity
  2. windows默认使用的是IE7内核,不少js特性不支持,可以在注册表[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]中新加dword值,键为你的应用程序名字,如xxxx.exe,值为对应ie版本,2af9是IE11
  3. TODO
    • setJavascriptInterfaceScheme接口支持

效果图