1

あいまいなタイトルで申し訳ありませんが、説明についてはできるだけ具体的に説明します。

このサイトでの以前の質問を見ると、Chromeのコンテキストメニューにデータを入力する方法についてのヒントを求めていることがわかります。コンテキストメニューを使用している理由は、ユーザーに値のリストを表示する、アクセスしやすいインターフェイスが必要だからです。これらの値は、さまざまな種類の文書(たとえば、出生証明書や税務報告書)を表します。これらの各ドキュメントには、固有の属性(例:出生証明書は「出生証明書」および「ID」)とルールがあります。これらの属性とルールは、基本的にASP.Net WebサイトであるDMS(ドキュメント管理システム)にファイルをアップロードする必要がある場合に使用されます。テキストフィールドとドロップダウンリストは、前述のルールと属性を受け取るために使用されます。通常、ファイルを追加するときは、ドキュメントの種類に基づいてこれらのフィールドに手動で入力する必要があります。

さて、私がやりたい のは、コンテキストメニューの項目の1つをクリックするだけで(ここでも、「出生証明書」をクリックするとします)、ページのフィールドが対応する値で自動的に更新されます。

これまでに行ったことは、ほとんどのメニュー項目/ドキュメントタイプとそれに対応する属性/ルールをJSON形式で配置することです。私の当初の意図は、コンテキストメニュー拡張機能に含まれているスクリプトを使用してページのフィールドの値を設定することでした。ただ、私が間違っていない場合(私が間違っている場合は教えてください)、Chrome拡張機能を介してWebページ上のHTML要素の値を直接変更することはできません。

私が理解していることから、userscriptはそのタスクを実行できますが、ドキュメントのタイプを選択するためのコントロールインターフェイス(コンテキストメニュー)が必要です(常に同じパラメーターで実行されるスクリプトは必要ありません) 。

それで、私が説明したことから、あなたはこのタスクを達成するための最良の方法は何と言いますか?ユーザースクリプトを「呼び出す」か、少なくともいくつかのパラメーターを渡して、テキストフィールド/ドロップダウンリストの値を必要に応じて変更できますか?どんなアドバイスも大いにweclomeです。

PS私はいくつかのスクリプトをテストして、フィールドの値をプログラムで実際に変更できるかどうかを確認しました。「javascript:」プレフィックスを付けてアドレスバーにコード(フィールドに事前定義された値をいくつか含む)をコピーして貼り付けるだけで、チャームのように機能します。今、私はただする必要があります

  • 1)このアドレスバーのトリックを使用せずにこれを行うことができます
  • 2)値をハードコーディングするだけでなく、値を選択するための実際のインターフェイスを用意します。
4

1 に答える 1

1

私が間違っていなければ (間違っている場合は教えてください)、Web ページの HTML 要素の値を Chrome 拡張機能から直接変更することはできません。

確かに彼らはできます。指定したパターンに一致するサイトに自動的に挿入するように設定できるコンテンツ スクリプトを確認してください。を介してプログラムによるインジェクションを行うこともできます。Chrome 拡張機能は、ユーザー スクリプトよりもはるかに多くのツールにアクセスできます。chrome.tabs.executeScript

コンテキストメニューを作成するonclickときに設定したコールバックを使用してから、次を実行します。

chrome.tabs.executeScript(null, { file: "script_to_inject.js"});

スクリプトが読み込まれると、いくつかのオプションがありますが、メッセージ パッシングを使用してバックグラウンド ページから適切な情報を取得し、フィールドを変更するだけです。

簡単な例

manifest.json (これを権限に追加します)

"permissions": [ "http://*/*" ],

script_to_inject.js

chrome.extension.sendRequest("options", function(response) {
  alert(response.birthday); // Alerts the birthday in the response
  alert(response.name);     // Alerts the name in the response
  document.getElementById("some_field_id").value = response.name;
});

background.html (または background.js)

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
  switch (request) {
    case "options":
      sendResponse({birthday: "1/1/1970", name: "Unix"});
      break;
    default: // Add other cases as you see fit
      sendResponse({});
      break;
  }
});
于 2011-06-30T18:15:35.370 に答える