1

私が使用する可能性のある誤称については、すぐにお詫び申し上げます。

WebBrowser コントロールを使用して操作している PHP によって生成された一連の Web ページがあります。これらのページでは、ボディ内に埋め込まれた JavaScript 関数が定義されています (これはばかげています。私はそれらを作成していません。私はそれらを操作する必要があります)。

Document.InvokeScript メソッドを使用してこれらの関数にアクセスすることはできますか?できない場合は、どうすればアクセスできますか?

4

3 に答える 3

1

Windowsフォームの実装では、IDispatch.GetIDsOfNamesを使用して、スクリプトエンジンの最上位の名前付きアイテムで関数名と完全に一致するものを探します。アクティブスクリプトインターフェイスのMSHTMLのJScript実装の場合、最上位の名前付きアイテムは次のとおりです。

  • jscriptグローバルのメンバー(これは、コードがjscriptで記述されていることを前提としていることに注意してください。vbスクリプトコードに表示されるグローバルについては、VBScript言語リファレンスを確認してください) 。
  • ウィンドウオブジェクトのメンバー(なぜdocument.writeまたはXMLHttpRequestを直接使用できるのか疑問に思ったことはありませんか?)

スクリプトエンジンに新しい名前付きアイテムを追加する必要はありません(本当に必要な場合はIDispatchExを介して追加できます)。たとえば、既存の名前付きアイテムを使用してコードを実行する方法はたくさんあります。

上記のいずれかをスクリプトメソッドの名前として使用して、HtmlDocument.InvokeScriptで呼び出し、追加のパラメーターでコードを渡すことができます。

于 2013-01-24T20:50:13.090 に答える
0

はい - JavaScript のすべての機能に同等にアクセスできます。

ノート

  • 一部の JavaScript ファイルは、非常に早い段階でロードされない場合があります。すべてのスクリプトがロードされるまで、(ドキュメントの準備完了/完了、またはページからのカスタム通知/単純なタイムアウトのいずれか) を適切に待機する必要があります。
  • JavaScript 関数を「プライベート」window.FuncitionName(...)にすることができます (JavaScript で使用して呼び出すことはできません)。そのような関数を InvokeScript 経由で呼び出すこともできません。

以下のような「プライベート」関数のサンプル:

$(function(){  
   ....
   function MyHiddenFunction() {
     // you can't call be from outside!!!!
   }
});
于 2013-01-24T17:34:05.693 に答える