Add advanced handler to webview sample
Demonstrate how to implement and use wxWebViewHandler::StartRequest()
This commit is contained in:
parent
d998d864e8
commit
0adf31169d
4 changed files with 116 additions and 3 deletions
55
samples/webview/handler_advanced.html
Normal file
55
samples/webview/handler_advanced.html
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<head>
|
||||
<title>Advanced Handler Sample</title>
|
||||
|
||||
<style>
|
||||
.mono {
|
||||
font-family: monospace;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
function sendRequest() {
|
||||
let url = document.getElementById("request_url").value;
|
||||
let request_content_type = document.getElementById("request_content_type").value;
|
||||
let request_data = document.getElementById("request_data").value;
|
||||
console.log("clicked");
|
||||
|
||||
const req = new XMLHttpRequest();
|
||||
req.addEventListener("load", (ev) => {
|
||||
document.getElementById("response_response").value = req.responseText;
|
||||
});
|
||||
req.open("POST", url);
|
||||
req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
|
||||
req.send(request_data);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<p>
|
||||
This sample demonstrates how to use <i>wxWebViewHandler::StartRequest()</i>
|
||||
to enable advanced requests from html and javascript in the web view.
|
||||
</p>
|
||||
|
||||
Request URL<br />
|
||||
<input id="request_url" size="40" value=""><br />
|
||||
Request content type<br />
|
||||
<input id="request_content_type" size="40" value="application/json"><br />
|
||||
Request Data<br />
|
||||
<textarea class="mono" cols="60" rows="8" id="request_data">{ param1: "wxwidgets", param2: "webview" }</textarea>
|
||||
<br />
|
||||
<button onclick="sendRequest()">Start request</button><br />
|
||||
Response Data<br />
|
||||
<textarea class="mono" cols="60" rows="8" id="response_response"></textarea>
|
||||
|
||||
<script>
|
||||
// init request_url
|
||||
let postURL;
|
||||
if (navigator.userAgent.indexOf("Edg") > 0)
|
||||
postURL = "https://wxpost.wxsite//main/test/1";
|
||||
else
|
||||
postURL = "wxpost://main/test/1";
|
||||
|
||||
document.getElementById("request_url").value = postURL;
|
||||
</script>
|
||||
</body>
|
||||
|
|
@ -17,4 +17,10 @@
|
|||
</if>
|
||||
</exe>
|
||||
|
||||
<wx-data id="data">
|
||||
<files>
|
||||
handler_advanced.html
|
||||
</files>
|
||||
</wx-data>
|
||||
|
||||
</makefile>
|
||||
|
|
|
|||
|
|
@ -164,6 +164,7 @@ public:
|
|||
void OnSelectAll(wxCommandEvent& evt);
|
||||
void OnLoadScheme(wxCommandEvent& evt);
|
||||
void OnUseMemoryFS(wxCommandEvent& evt);
|
||||
void OnLoadAdvancedHandler(wxCommandEvent& evt);
|
||||
void OnFind(wxCommandEvent& evt);
|
||||
void OnFindDone(wxCommandEvent& evt);
|
||||
void OnFindText(wxCommandEvent& evt);
|
||||
|
|
@ -257,6 +258,40 @@ public:
|
|||
SourceViewDialog(wxWindow* parent, wxString source);
|
||||
};
|
||||
|
||||
// AdvancedWebViewHandler is a sample handler used by handler_advanced.html
|
||||
// to show a sample implementation of wxWebViewHandler::StartRequest().
|
||||
// see the documentation for additional details.
|
||||
class AdvancedWebViewHandler: public wxWebViewHandler
|
||||
{
|
||||
public:
|
||||
AdvancedWebViewHandler():
|
||||
wxWebViewHandler("wxpost")
|
||||
{ }
|
||||
|
||||
virtual void StartRequest(const wxWebViewHandlerRequest& request,
|
||||
wxSharedPtr<wxWebViewHandlerResponse> response) wxOVERRIDE
|
||||
{
|
||||
response->SetHeader("Access-Control-Allow-Origin", "*");
|
||||
response->SetHeader("Access-Control-Allow-Headers", "*");
|
||||
|
||||
// Handle options request
|
||||
if (request.GetMethod().IsSameAs("options", false))
|
||||
{
|
||||
response->Finish("");
|
||||
return;
|
||||
}
|
||||
|
||||
response->SetContentType("application/json");
|
||||
response->Finish(
|
||||
wxString::Format(
|
||||
"{\n contentType: \"%s\",\n method: \"%s\",\n data: \"%s\"\n}",
|
||||
request.GetHeader("Content-Type"),
|
||||
request.GetMethod(),
|
||||
request.GetDataString()
|
||||
));
|
||||
}
|
||||
};
|
||||
|
||||
wxIMPLEMENT_APP(WebApp);
|
||||
|
||||
// ============================================================================
|
||||
|
|
@ -383,6 +418,7 @@ WebFrame::WebFrame(const wxString& url) :
|
|||
// With WKWebView handlers need to be registered before creation
|
||||
m_browser->RegisterHandler(wxSharedPtr<wxWebViewHandler>(new wxWebViewArchiveHandler("wxfs")));
|
||||
m_browser->RegisterHandler(wxSharedPtr<wxWebViewHandler>(new wxWebViewFSHandler("memory")));
|
||||
m_browser->RegisterHandler(wxSharedPtr<wxWebViewHandler>(new AdvancedWebViewHandler()));
|
||||
#endif
|
||||
m_browser->Create(this, wxID_ANY, url, wxDefaultPosition, wxDefaultSize);
|
||||
topsizer->Add(m_browser, wxSizerFlags().Expand().Proportion(1));
|
||||
|
|
@ -397,6 +433,7 @@ WebFrame::WebFrame(const wxString& url) :
|
|||
m_browser->RegisterHandler(wxSharedPtr<wxWebViewHandler>(new wxWebViewArchiveHandler("wxfs")));
|
||||
//And the memory: file system
|
||||
m_browser->RegisterHandler(wxSharedPtr<wxWebViewHandler>(new wxWebViewFSHandler("memory")));
|
||||
m_browser->RegisterHandler(wxSharedPtr<wxWebViewHandler>(new AdvancedWebViewHandler()));
|
||||
#endif
|
||||
if (!m_browser->AddScriptMessageHandler("wx"))
|
||||
wxLogError("Could not add script message handler");
|
||||
|
|
@ -492,8 +529,11 @@ WebFrame::WebFrame(const wxString& url) :
|
|||
|
||||
editmenu->AppendSubMenu(selection, "Selection");
|
||||
|
||||
wxMenuItem* loadscheme = m_tools_menu->Append(wxID_ANY, _("Custom Scheme Example"));
|
||||
wxMenuItem* usememoryfs = m_tools_menu->Append(wxID_ANY, _("Memory File System Example"));
|
||||
wxMenu* handlers = new wxMenu();
|
||||
wxMenuItem* loadscheme = handlers->Append(wxID_ANY, _("Custom Scheme"));
|
||||
wxMenuItem* usememoryfs = handlers->Append(wxID_ANY, _("Memory File System"));
|
||||
wxMenuItem* advancedHandler = handlers->Append(wxID_ANY, _("Advanced Handler"));
|
||||
m_tools_menu->AppendSubMenu(handlers, _("Handler Examples"));
|
||||
|
||||
m_context_menu = m_tools_menu->AppendCheckItem(wxID_ANY, _("Enable Context Menu"));
|
||||
m_dev_tools = m_tools_menu->AppendCheckItem(wxID_ANY, _("Enable Dev Tools"));
|
||||
|
|
@ -591,6 +631,7 @@ WebFrame::WebFrame(const wxString& url) :
|
|||
Bind(wxEVT_MENU, &WebFrame::OnSelectAll, this, selectall->GetId());
|
||||
Bind(wxEVT_MENU, &WebFrame::OnLoadScheme, this, loadscheme->GetId());
|
||||
Bind(wxEVT_MENU, &WebFrame::OnUseMemoryFS, this, usememoryfs->GetId());
|
||||
Bind(wxEVT_MENU, &WebFrame::OnLoadAdvancedHandler, this, advancedHandler->GetId());
|
||||
Bind(wxEVT_MENU, &WebFrame::OnFind, this, m_find->GetId());
|
||||
Bind(wxEVT_MENU, &WebFrame::OnEnableContextMenu, this, m_context_menu->GetId());
|
||||
Bind(wxEVT_MENU, &WebFrame::OnEnableDevTools, this, m_dev_tools->GetId());
|
||||
|
|
@ -748,6 +789,17 @@ void WebFrame::OnUseMemoryFS(wxCommandEvent& WXUNUSED(evt))
|
|||
m_browser->LoadURL("memory:page1.htm");
|
||||
}
|
||||
|
||||
void WebFrame::OnLoadAdvancedHandler(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
wxPathList pathlist;
|
||||
pathlist.Add(".");
|
||||
pathlist.Add("..");
|
||||
|
||||
wxString path = wxFileName(pathlist.FindValidPath("handler_advanced.html")).GetAbsolutePath();
|
||||
path = "file://" + path;
|
||||
m_browser->LoadURL(path);
|
||||
}
|
||||
|
||||
void WebFrame::OnEnableContextMenu(wxCommandEvent& evt)
|
||||
{
|
||||
m_browser->EnableContextMenu(evt.IsChecked());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue