Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何:模拟由JavaScript启动的WebBrowser警报/消息框中的单击确定?(德尔菲)_Javascript_Delphi_Click_Browser_Alert - Fatal编程技术网

如何:模拟由JavaScript启动的WebBrowser警报/消息框中的单击确定?(德尔菲)

如何:模拟由JavaScript启动的WebBrowser警报/消息框中的单击确定?(德尔菲),javascript,delphi,click,browser,alert,Javascript,Delphi,Click,Browser,Alert,我有一个内置WebBrowser的应用程序: 当我发布我的网页时,我有javascript弹出警报/消息框,我需要点击OK。以下是创建警报的javascript: function delete(){ if (confirm('Are you sure you wish to delete this ?')){ document.forms.item.action = "edit.asp?action=delete"; docume

我有一个内置WebBrowser的应用程序:

当我发布我的网页时,我有javascript弹出警报/消息框,我需要点击OK。以下是创建警报的javascript:

    function delete(){
    if (confirm('Are you sure you wish to delete this ?')){
            document.forms.item.action = "edit.asp?action=delete";
            document.forms.item.submit();
        }

    }
我搜索了一段时间,但还没有找到任何有效的解决方案


提前感谢您的帮助

alert()
confirm()
prompt()
框上的按钮不可编写脚本。改为使用HTML/CSS模式对话框。

如果这是用于非常受限的内部使用,您可以执行一个脏对话框

procedure TForm1.Timer1Timer(Sender: TObject);
const
  TargetCaption = 'Meddelande från webbsida';
var
  S: string;
  len: integer;
begin
  SetLength(S, 127);
  len := GetWindowText(Application.ActiveFormHandle, PChar(S), 127);
  if len = 0 then Exit;
  SetLength(S, len);
  if S = TargetCaption then
    SendMessage(Application.ActiveFormHandle, WM_COMMAND, ID_OK, 0);
end;
其中,
TargetCaption
TWebBrowser
弹出、确认或提示对话框的已知标题。这在操作系统版本和语言版本之间可能有所不同,因此这种方法只能在非常有限的内部应用程序中使用,在这种情况下,可以使用每个新的Windows SP“更新”应用程序

顺便说一下,“Meddelande från webbsida”是瑞典语,意思是“来自网页的消息”。

实现并显示您自己的对话框,或者只返回Såu OK

注意:链接已断开。下面是解决方案的代码:

      IDocHostShowUI = interface(IUnknown)
        ['{c4d244b0-d43e-11cf-893b-00aa00bdce1a}']
        function ShowMessage(hwnd: THandle; lpstrText: POleStr; lpstrCaption: POleStr;
          dwType: longint; lpstrHelpFile: POleStr; dwHelpContext: longint;
          var plResult: LRESULT): HRESULT; stdcall;
      end;

      TShowMessageEvent = function(Sender: TObject; HWND: THandle;
        lpstrText: POleStr; lpstrCaption: POleStr; dwType: Longint; lpstrHelpFile: POleStr;
        dwHelpContext: Longint; var plResult: LRESULT): HRESULT of object;

      TWebBrowser = class(SHDocVw.TWebBrowser, IDocHostShowUI)
        private
          fOnShowMessage: TShowMessageEvent;
        protected
          function ShowMessage(HWND: THandle; lpstrText: POleStr; lpstrCaption: POleStr;
            dwType: Longint; lpstrHelpFile: POleStr; dwHelpContext: Longint;
            var plResult: LRESULT): HRESULT; stdcall;
        published
          property OnShowMessage: TShowMessageEvent read fOnShowMessage write
            fOnShowMessage;
      end;

function TWebBrowser.ShowMessage(HWND: THandle; lpstrText, lpstrCaption: POleStr;
  dwType: Integer; lpstrHelpFile: POleStr; dwHelpContext: Integer;
  var plResult: LRESULT): HRESULT;
begin
  if Assigned(fOnShowMessage) then
    Result := fOnShowMessage(Self, HWND, lpstrText, lpStrCaption, dwType,
      lpStrHelpFile, dwHelpContext, plResult)
  else
  Result:= S_OK;
end;

使用Winspector之类的工具来标识出现警报的窗口的类别或标题。然后在窗体上创建一个计时器以监视窗口的出现,然后使用SendMessage向其发送鼠标向下或类似的消息。谢谢您的回答。你能说得更具体一点吗?-1实际上,你可以用
IDocHostShowUI::ShowMessage
Tack såmycket覆盖alert()和confirm()框!回答得很好,我正在测试你的解决方案。效果很好!祝斯文斯卡在手球决赛中好运!:)我们昨天刚输给你。有没有办法从网站上抓取文本,然后在IE的“是/否”对话框中按“否”键?方法ID_NO和ID_YES得到了:)这实际上是我问题的最佳解决方案:`function CommandTarget_Exec(CmdGroup:PGUID;nCmdID,nCmdexecopt:DWORD;const-vaIn:OleVariant;var-vaOut:OleVariant):HRESULT;如果nCmdID=olcemdid\u SHOWMESSAGE开始,则开始结果:=S\u OK;vaOut:=真;出口结束;结束;'