1

WebBrowserを内蔵したアプリがあります。

WebページをPOSTすると、[OK]をクリックする必要がある場所にjavascriptポップアップアラート/メッセージボックスが表示されます。アラートを作成する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();
        }

    }

私はしばらく探していましたが、まだ実用的な解決策を見つけることができませんでした...

よろしくお願いします!

4

3 に答える 3

1

IDocHostShowUI :: ShowMessageを実装して独自のダイアログを表示するか、S_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;
于 2012-08-10T00:22:51.523 に答える
1

これが非常に制限された内部使用のためのものである場合、あなたは汚いことをすることができます

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これはOSのバージョンと言語のバージョンによって異なる可能性があるため、このアプローチは非常に制限された社内アプリケーションでのみ受け入れられます。この場合、新しいWindowsSPごとにアプリケーションを「更新」することができます。

ちなみに、「Meddelandefrånwebbsida」はスウェーデン語で「Webページからのメッセージ」を意味します。

于 2012-08-09T15:51:27.073 に答える
-2

ボタンalert() confirm()prompt()ボックスはスクリプト化できません。代わりに、HTML/CSSモーダルダイアログを使用してください。

于 2012-08-09T14:33:51.497 に答える