小编Pro*_*imo的帖子

更改WebBrowser控件的用户代理

我试图在Winforms应用程序中更改WebBrowser控件的UserAgent.

我已成功使用以下代码实现此目的:

[DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
private static extern int UrlMkSetSessionOption(
    int dwOption, string pBuffer, int dwBufferLength, int dwReserved);

const int URLMON_OPTION_USERAGENT = 0x10000001;

public void ChangeUserAgent()
{
    List<string> userAgent = new List<string>();
    string ua = "Googlebot/2.1 (+http://www.google.com/bot.html)";

    UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0);
}
Run Code Online (Sandbox Code Playgroud)

唯一的问题是这只能工作一次.当我尝试第二次运行ChangeUserAgent()方法时,它不起作用.它保持设置为第一个更改的值.这很烦人,我已经尝试了一切,但它不会改变不止一次.

有谁知道一种不同的,更灵活的方法?

谢谢

c# user-agent webbrowser-control winforms

44
推荐指数
3
解决办法
8万
查看次数

确定表单输入是否具有焦点

我正在AngularJS中进行验证,如果有3种类型的错误,我会显示一个div.

对于required,我只想在页面以空值提交时显示错误消息

<div class="error" data-ng-show="submitted && mainForm.email.$error.required" />
Run Code Online (Sandbox Code Playgroud)

对于正则表达式验证,我希望它标记实时的默认行为.

<div class="error" data-ng-show="mainForm.email.$error.pattern" />
Run Code Online (Sandbox Code Playgroud)

我面临的问题是minlength.我不想在打字时显示它.这很烦人,因为他们还没有完成打字.我也不想在提交时显示它,我认为为时已晚.当它们不再是元素的焦点时,我想展示它.

如果//mainForm.email.$focus存在,我可以简单地这样做

<div class="error" data-ng-show="mainForm.email.$error.minlength && 
!mainForm.email.$focus"/>
Run Code Online (Sandbox Code Playgroud)

有人知道有什么方法可以做这种检查或任何非抽出的替代方案吗?

谢谢!

validation focus onchange angularjs

25
推荐指数
2
解决办法
3万
查看次数

如何从windows.form中删除Cookies?

我正在使用C#编写的windows.form应用程序上的Webbrowser控件.我想写一个方法,在访问某个站点后从Webbrowers控件中删除cookie.不幸的是,我不知道该如何做到这一点,并没有在互联网上找到很多帮助.

如果有人有实际经验,不仅仅是假设,因为它可能比看起来更棘手,我不知道.

int count = webBrowser2.Document.Cookie.Length;
webBrowser2.Document.Cookie.Remove(0,count);
Run Code Online (Sandbox Code Playgroud)

我只是假设上面的代码可以工作,但我想它不会.任何人都可以对这整个饼干有所了解吗?

c# cookies webbrowser-control

23
推荐指数
3
解决办法
6万
查看次数

Dockerfile覆盖ENV变量

我有一个Dockerfile,我想使用默认值配置API.

来自socialengine/nginx-spa

ENV API_URL localhost:6007

因此,当我运行此图像时,我将能够使用以下内容覆盖localhost:6007:

docker run -e API_URL = production.com:6007 ui

这不起作用,我找不到如何做到这一点的明确解释.

有什么建议?

bash environment-variables docker

20
推荐指数
1
解决办法
2万
查看次数

使用Interop.SHDocVw.dll我在哪里可以找到这个命名空间/ dll?

我以前做过这个,我不记得我是从网上下载了DLL还是其他东西,但我不想得病毒.我需要访问此命名空间,以便我可以拥有Webbrowswer控件不提供的额外功能.

如何准确添加Com引用.或者我是否需要来自某个地方的dll

谢谢

dll namespaces reference shdocvw webbrowser-control

14
推荐指数
1
解决办法
3万
查看次数

NGINX - 在不同端口上反向代理多个API

我有以下API:

  1. 本地主机:300/API /客户/
  2. 本地主机:400/API /客户/:ID /计费
  3. 本地主机:500/API /订单

我想使用NGINX将它们全部运行在以下位置:

本地主机:443/API /

这似乎非常困难,因为客户跨越两台服务器.

这是我从订单开始的失败尝试

server {
    listen 443;
    server_name localhost;

    location /api/orders {
            proxy_pass https://localhost:500/api/orders;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
    }
}


server {
    listen 443;
    server_name localhost;

    location /api/customers/$id/billing {
            proxy_pass https://localhost:400/api/customers/$id/billing;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
    }
}

server {
    listen 443;
    server_name localhost;

    location /api/customers {
            proxy_pass https://localhost:300/api/customers;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
    }
}
Run Code Online (Sandbox Code Playgroud)

什么东西跳出来修复?谢谢!

api port reverse-proxy nginx

12
推荐指数
2
解决办法
1万
查看次数

Mongo 模式,具有唯一值的字符串数组

我正在为 mongo 文档创建架构,除了防止非对象数组中的重复项外,我可以做任何事情。

我知道 addToSet,但我指的是 Mongo Schema。

我不想使用 $addToSet 检查更新,而是希望这成为我的架构验证的一部分。

下面举例。

let sampleSchema = {
   name: { type: 'String', unique: true },
   tags: [{ type: 'String', unique: true }]
}
Run Code Online (Sandbox Code Playgroud)

上面的代码段防止 name 具有重复的值。它允许将标签存储为字符串数组。

但是..我不能将数组限制为唯一的字符串。

{ name: 'fail scenario', tags: ['bad', 'bad', 'array']}
Run Code Online (Sandbox Code Playgroud)

我能够插入这条记录,这应该是一个失败的场景。

arrays json mongoose mongodb mongoose-schema

7
推荐指数
1
解决办法
7303
查看次数

使用C#winforms与Windows中的其他桌面应用程序进行交互

我想知道是否可以与我的程序中的其他程序进行交互.例如,单击另一个程序等上的按钮等.我不确定这是否可能,但如果有人可以在C#中提供一些示例代码.

谢谢

c# windows winapi interaction desktop-application

6
推荐指数
1
解决办法
6504
查看次数

.NET WebBrowser 控件新窗口上的 Javascript Window.Opener 对象为空

好吧,我在 .NET Framework 的 WebBroswer 控件中有一个弹出窗口,我使用 NewWindow 事件处理程序像这样捕获它。

WebBrowser w = new WebBrowser();
SHDocVw.WebBrowser_V1 web = (SHDocVw.WebBrowser_V1)w.ActiveXInstance;
web.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(web_NewWindow);
Run Code Online (Sandbox Code Playgroud)

新的 Popup 是一个带有 WebBrowser 控件的新实例的新表单。

void web_NewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
    {
        Processed = true;
        WebBrowser w2 = new WebBrowser();

        Form PopUp = new Form();
        PopUp.Controls.Clear();
        PopUp.Controls.Add(w2);
        w2.Dock = DockStyle.Fill;
        PopUp.Show();
        w2.Navigate(URL);
        w2.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(w2_DocumentCompleted);
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是 Window.Opener 对象在此过程中为空。

该页面使用该字段将用户返回到原始窗口并在表单上填写一些值。

反正有没有将 Window.Opener 对象从一个 WebBrowser 控件传递到下一个?这似乎不可能,但我必须尝试。

谢谢

.net javascript webforms webbrowser-control window.opener

5
推荐指数
1
解决办法
4910
查看次数

MultiThreading WebBrowser控件C#STA

我想制作3个线程,每个线程运行WebBroswer控件.所以我想使用ThreadPool让事情变得简单.

for(int i = 0;i < 3;i++)
{
   ThreadPool.QueueUserWorkItem(new WaitCallback(gotoWork), i));
}
WaitAll(waitHandles);
Run Code Online (Sandbox Code Playgroud)

....../

void gotoWork(object o)
{
   string url = String.Empty;
   int num = (int)o;
   switch(num)
   {
     case 0:
       url = "google.com";
       break;
     case 1:
       url = "yahoo.com";
       break;
     case 2:
       url = "bing.com";
       break;
   }
   WebBrowser w = new WebBrower();
   w.Navigate(url);
}
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误,说我需要一个ThreadPool永远不会的STA线程.在尝试这种方法之前,我试过这个.

Thread[] threads = Thread[3];
for(int i = 0;i < 3;i++)
{
    threads[i] = new Thread(new ParameterizedStart(gotoWork);
    threads[i] = SetApartmentState(ApartmentState.STA); //whoo hoo
    threads[i] = Start();
} …
Run Code Online (Sandbox Code Playgroud)

c# multithreading webbrowser-control

5
推荐指数
1
解决办法
1万
查看次数