0

私の古いFirefoxエクステンションをWebExtenstion APIに移行しています。ここに私の拡張子が何をするかです: Firefoxアドオン(WebExtension API)からWebページを変更する:要素に正しくアクセスする方法?

  1. は、ユーザーがボタンをクリックしたときに
  2. はオプション
  3. の4つの設定を指定し、ツールバーにボタンを追加し、私はURLを確認してください。 URLが3つの可能な値のいずれかと一致する場合は、オプションページの値を使用してページ上の入力要素を入力し、フォームボタンをクリックします。だからここ

は私のmanifest.jsonを次のとおりです。index.jsで

{ 

    "manifest_version": 2, 
    "name": "Login", 
    "version": "3.0", 

    "description": "Login to myinterfaces", 
    "homepage_url": "localhost", 
    "icons": { 
    "48": "icons/button-1.png" 
    }, 

    "permissions": [ 
    "activeTab", "storage", "tabs" 
    ], 

    "browser_action": { 
    "default_icon": "icons/button-1.png", 
    "default_title": "My Login" 
    }, 


    "options_ui": { 
    "page": "options.html" 
    }, 


    "background": { 
    "scripts": ["index.js"] 
    } 
} 

、私は成功し、オプションページから値を取得し、私のアクティブなタブのURLを決定します。その後、ページの値を変更しようとしています。ここで私はそれを行う方法です。

var doc = window.content.document; 

doc.getElementById("btnLogin").disabled = false; 
doc.getElementById("loginUserName").value = loginUserName; 
doc.getElementById("loginPassword").value = loginPassword; 

しかし

doc.getElementById("btnLogin").disabled = false; 

...のために...私は取得しています:

TypeError: doc.getElementById(...) is null 

をだから私は、このページをお読みください。https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Modify_a_web_page

すべてを正しく理解しているかわからないので、ここにいくつかの質問

バックグラウンドスクリプトからWebページにアクセスできますか?可能であれば、私は持っているエラーにどのように対処するのですか?可能でない場合は、コンテンツとバックグラウンドスクリプトの間でメッセージングを使用するはずです。では、バックグラウンドスクリプトのloginUserNameとloginPasswordの値をコンテンツスクリプトに送信し、コンテンツスクリプトのページを変更する必要がありますか?それが正しいか?

おかげで、 ラクーン

答えて

1

は、それがバックグラウンドスクリプトからWebページにアクセスすることは可能ですか?

window.content.documentは、その文脈で背景ページあります。背景ページは、目に見えないタブで開いた別のドキュメントと考えることができます。

コンテンツスクリプトが必要で、通信する必要があります。 extension architectureのChromeドキュメントを参照してください - 私はMDNに似ていると確信しています。

可能であれば、コンテンツとバックグラウンドスクリプトの間でメッセージングを使用するはずです。では、バックグラウンドスクリプトのloginUserNameとloginPasswordの値をコンテンツスクリプトに送信し、コンテンツスクリプトのページを変更する必要がありますか?

これは正しいですが、browser.storageをオプションとして使用すると、コンテンツスクリプトから直接アクセスできます。

メッセージが必要です。背景ページだけがツールバーボタンのonClickedイベント(WebExtensionの用語では「ブラウザアクション」)を取得できます。

事前に(マニフェストを介して)コンテンツスクリプトを挿入する必要はありません。ここではprogrammatic injection + "activeTab"の権限を使用することができます。これにより、拡張機能を使用しない場合のユーザーのパフォーマンスが向上し、権限の警告がはるかに少なくなります。

関連する問題