Console.log() 不会输出到 C++ 中 Awesomium 的远程调试器
Console.log() does not output to remote debugger for Awesomium in C++
我正在为我的 C++ 应用程序的 UI 使用 Awesomium library("plain" C++,没有 .NET,预编译头等)。
一切正常,我可以将事件从 C++ 应用程序发送到 Awesomium 中的 JavaScript,反之亦然。 UI 响应点击等,感谢 webCore->Update()
。
问题是,JavaScript 中有时会出现错误。我希望看到它们像Edge/Chrome/Firefox(您可以按 F12 查看控制台、调试器等)。
我知道可以通过适当的方式为 Awesomium 使用远程调试器 WebConfig
所以我试过了:
Awesomium::WebConfig webConfig;
webConfig.remote_debugging_host = Awesomium::WSLit("127.0.0.1");
webConfig.remote_debugging_port = 9222;
//create the WebCore singleton with configuration
webCore = Awesomium::WebCore::Initialize(webConfig);
//create a new WebView instance with a certain width and height
view = webCore->CreateWebView(width, height, 0, Awesomium::kWebViewType_Window);
view->set_parent_window(*windowHandle->getHWND());
view->set_view_listener(this);
//create a global js object named 'app'
Awesomium::JSValue result = view->CreateGlobalJavascriptObject(Awesomium::WSLit("app"));
//bind our method dispatcher to the WebView
view->set_js_method_handler(this);
if (result.IsObject()) {
//bind our custom method to it
Awesomium::JSObject& appObject = result.ToObject();
appObject.SetCustomMethod(Awesomium::WSLit("sendEvent"), false);
}
现在 Chrome 在 http://localhost:9222/#
我看到了我的会话:
我能够,例如我的 C++ 应用程序中的 select UI 个元素与调试器。
但我在 Chrome 中的调试器控制台选项卡中看不到任何内容(我确实在加载到 Awesomium 的网站内部使用了 console.log("Hello!")
):
p.s。调试器 window 不是 100% 高度(如您在屏幕上所见)。我能以某种方式修复它吗?
p.s.2。 Google Chrome 不是我选择的浏览器。我可以使用另一个来调试 Awesomium UI吗?
JavaScript error/debug 消息在 Awesomium (v1.7.5.1) 的远程调试器中不可见。
我找到的唯一方法是听 WebViewListener::Load
class 中的 OnAddConsoleMessage()
方法。
您必须制作自己的子class并将其注册到您的网络视图。
#include <Awesomium/WebViewListener.h>
class MyViewListender : public WebViewListener::View {
// ... All the overridden WebViewListener::View methods go here
void OnAddConsoleMessage(Awesomium::WebView* caller,
const Awesomium::WebString& message,
int line_number,
const Awesomium::WebString& source)
{
cout << "Console: " << message << endl;
}
};
注册它:
MyViewListender* my_view_listener = new MyViewListender();
view->set_view_listener(my_view_listener);
我正在为我的 C++ 应用程序的 UI 使用 Awesomium library("plain" C++,没有 .NET,预编译头等)。
一切正常,我可以将事件从 C++ 应用程序发送到 Awesomium 中的 JavaScript,反之亦然。 UI 响应点击等,感谢 webCore->Update()
。
问题是,JavaScript 中有时会出现错误。我希望看到它们像Edge/Chrome/Firefox(您可以按 F12 查看控制台、调试器等)。
我知道可以通过适当的方式为 Awesomium 使用远程调试器 WebConfig
所以我试过了:
Awesomium::WebConfig webConfig;
webConfig.remote_debugging_host = Awesomium::WSLit("127.0.0.1");
webConfig.remote_debugging_port = 9222;
//create the WebCore singleton with configuration
webCore = Awesomium::WebCore::Initialize(webConfig);
//create a new WebView instance with a certain width and height
view = webCore->CreateWebView(width, height, 0, Awesomium::kWebViewType_Window);
view->set_parent_window(*windowHandle->getHWND());
view->set_view_listener(this);
//create a global js object named 'app'
Awesomium::JSValue result = view->CreateGlobalJavascriptObject(Awesomium::WSLit("app"));
//bind our method dispatcher to the WebView
view->set_js_method_handler(this);
if (result.IsObject()) {
//bind our custom method to it
Awesomium::JSObject& appObject = result.ToObject();
appObject.SetCustomMethod(Awesomium::WSLit("sendEvent"), false);
}
现在 Chrome 在 http://localhost:9222/#
我看到了我的会话:
我能够,例如我的 C++ 应用程序中的 select UI 个元素与调试器。
但我在 Chrome 中的调试器控制台选项卡中看不到任何内容(我确实在加载到 Awesomium 的网站内部使用了 console.log("Hello!")
):
p.s。调试器 window 不是 100% 高度(如您在屏幕上所见)。我能以某种方式修复它吗?
p.s.2。 Google Chrome 不是我选择的浏览器。我可以使用另一个来调试 Awesomium UI吗?
JavaScript error/debug 消息在 Awesomium (v1.7.5.1) 的远程调试器中不可见。
我找到的唯一方法是听 WebViewListener::Load
class 中的 OnAddConsoleMessage()
方法。
您必须制作自己的子class并将其注册到您的网络视图。
#include <Awesomium/WebViewListener.h>
class MyViewListender : public WebViewListener::View {
// ... All the overridden WebViewListener::View methods go here
void OnAddConsoleMessage(Awesomium::WebView* caller,
const Awesomium::WebString& message,
int line_number,
const Awesomium::WebString& source)
{
cout << "Console: " << message << endl;
}
};
注册它:
MyViewListender* my_view_listener = new MyViewListender();
view->set_view_listener(my_view_listener);