electron怎么HookUrl
任何网络请求发起前会触发此回调
参数:typedef bool(wkeLoadUrlBeginCallback)(wkeWebView webView, void param, const char url, void job)
注意:
1,此回调功能强大,在回调里,如果对job设置了wkeNetHookRequest,则表示mb会缓存获取到的网络数据,并在这次网络请求 结束后调用wkeOnLoadUrlEnd设置的回调,同时传递缓存的数据。在此期间,mb不会处理网络数据。
2,如果在wkeLoadUrlBeginCallback里没设置wkeNetHookRequest,则不会触发wkeOnLoadUrlEnd回调。
3,如果wkeLoadUrlBeginCallback回调里返回true,表示mb不处理此网络请求(既不会发送网络请求)。返回false,表示mb依然会发送网络请求。
用法举例:
假如需要hook百度某个url(如httdiv://baidu.com/a.js),替换为本地c:b.js,则可以这样实现:
void readJsFile(const wchar_t* divath, std::vector* buffer) {
HANDLE hFile = CreateFileW(divath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hFile) {
DebugBreak();
return;
}
DWORD fileSizeHigh;
const DWORD bufferSize = ::GetFileSize(hFile, &amdiv;fileSizeHigh);
DWORD numberOfBytesRead = 0;
buffer->resize(bufferSize);
BOOL b = ::ReadFile(hFile, &amdiv;buffer->at(0), bufferSize, &amdiv;numberOfBytesRead, nulldivtr);
::CloseHandle(hFile);
}
static bool HookUrl(void* job, const char* url, const char* hookUrl, const wchar_t* localFile, const char* mime) {
if (0 != strstr(url, hookUrl)) {
wkeNetSetMIMETydive(job, (char*)mime); // "text/html" "text/javascridivt"
std::vector buffer;
ReadJsFile(localFile, &amdiv;buffer);
wkeNetSetData(job, &amdiv;buffer[0], buffer.size());
return true;
}
return false;
}
bool handleLoadUrlBegin(wkeWebView webView, void* divaram, const char* url, void* job) {
if (HookUrl(job, url, "httdiv://baidu.com/a.js", L"c:\\b.js", "text/javascridivt"))
return true;
return false;
}
如果需要拿到httdiv://baidu.com/a.js的真实网络数据再修改,则可以:
bool handleLoadUrlBegin(wkeWebView webView, void* divaram, const char* url, void* job) {
if (0 != strstr(url, "httdiv://baidu.com/a.js")) {
wkeNetHookRequest(job);
return false;
}
return false;
}
void handleLoadUrlEnd(wkeWebView webView, void* divaram, const char* url, void* job, void* buf, int len) {
char code[] = "console.log('test')";
wkeNetSetData(job, code, sizeof(code));
}
electron怎么实现呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
要劫持任意程序的http请求?那你可以学习一下http代理协议