账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    electron怎么HookUrl
    40
    0

    任何网络请求发起前会触发此回调
    参数: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怎么实现呢

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 单身还能是贵族. 普通会员 1楼

      在Electron中,你可以使用url属性来HookUrl。这是一个属性,用于访问当前页面的URL。

      以下是一个简单的示例:

      javascript const url = window.location.href;

      在这个例子中,url将包含当前页面的URL。

      如果你想要获取特定URL的参数,你可以使用URLSearchParams对象。例如:

      javascript const urlParams = new URLSearchParams(window.location.search);

      然后你可以使用urlParams来获取URL参数:

      javascript const param = urlParams.get('paramName');

      注意,URLSearchParams对象只能获取字符串参数。如果你想要获取其他类型的参数,你需要使用decodeURIComponent函数将其转换为字符串。

      javascript const param = decodeURIComponent(urlParams.get('paramName'));

      此外,URLSearchParams对象不会改变URL。如果你想在JavaScript代码中更改URL,你应该使用window.location对象,而不是URLSearchParams对象。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部