前言

上一篇把 Cocos2d 环境搭好了,今天来学习一下 Webview 的使用。

使用

我们往 HelloWorldScene 中的 init 方法加入如下代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include "ui/UIWebView/UIWebView.h"

bool HelloWorld::init()
{
    if (!Scene::init())
    {
        return false;
    }

    auto size = Director::getInstance()->getWinSize();
    auto webview = cocos2d::ui::WebView::create();
    webview->setPosition(size/2);
    webview->setContentSize(size);
    webview->loadURL("https://www.cocos.com/");
    addChild(webview);
}

编译后直接运行,就可以看到 cocos2d 的官网了,如下所示(iOS 模拟器)

适配桌面平台

如果你按照上面的代码在桌面平台,也就是 Mac 或者 Windows 上运行,是无法通过编译的,会报如下错误

1
2
Undefined symbol: cocos2d::ui::WebView::create()
Undefined symbol: cocos2d::ui::WebView::loadURL(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)

这是因为它在桌面平台就没有引入 WebView ,我们查看 CocosGUI.h 源码,如下

1
2
3
4
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#include "ui/UIVideoPlayer.h"
#include "ui/UIWebView/UIWebView.h"
#endif

可以看到这里只有在 AndroidiOS 的情况下才会引入 WebView ,既然在桌面平台不能用,那怎么适配呢?

桌面平台没有对对应的控件可以用,那么我们可以跳转到系统的浏览器并打开对应的网页,也能达到一定的效果。使用如下代码实现

1
Application::getInstance()->openURL("https://www.cocos.com/");

运行之后就会打开系统的默认浏览器,例如 ChromeEdge 等。

完整源码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#include "ui/UIWebView/UIWebView.h"
#endif

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
auto size = Director::getInstance()->getWinSize();
auto webview = cocos2d::ui::WebView::create();
webview->setPosition(size/2);
webview->setContentSize(size);
webview->loadURL("https://www.cocos.com/");
addChild(webview);
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_MAC || CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
Application::getInstance()->openURL("https://www.cocos.com/");
#endif

总结

今天我们学习了在移动平台中使用 WebView ,由于不支持桌面平台所以我们通过跳转到系统浏览器来打开对应的网页。

参考