0

以下に、期待どおりに機能するxul アドオンのコードを示します。

つまり、ブラウザの起動時に入力されたユーザー名とパスワードが表示され、トピックが http-on-examine-response の場合は常に検証され、指定されたファイルに書き込まれます。

しかし、ブートストラップされた拡張機能に変換しようとすると、ブラウザーの起動時に入力されたユーザー名パスワードさえ表示されず、コンパイルして実行してもコンソールに何も表示されません。

コンポーネントをCu/Cc/etcに変更した後、間違ったことを理解できませんでした。以下のリンクを参考にしました

https://developer.mozilla.org/en/Add-ons/Bootstrapped_extensions

MDN ドキュメントで XUL 要素を理解することに関する段落は何を意味しますか: 「オーバーレイ拡張機能を再起動なしに変換する方法」

https://github.com/Noitidart/l10n/tree/xhtml-xul

以下は私のコードです:

const {Cc, Ci, Cu, components} = require("chrome");
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
function Tdatacounter() {
  var Tdatacounter = {
    observe: function(subject, topic, data) {
      if (topic == "http-on-examine-response") {
        var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
        if (httpChannel.responseStatusText == "OK")
        {
        var buffer =  httpChannel.URI.spec;
          var pw = buffer.search("pub.tdata.com/releasepic");
          if (pw > 0)
          {
          var date = new Date();
          var TimeStamp = date.toLocaleString();
          var pfum = buffer.search("flag=unmap");
          if (pfum > 0 )
          {
          var flagname = "unmap";
          var flagnum = 4;
          }
          if (flagnum > 0)
          {
          buffer += "^" + ThisUserName + "^" + ThisComputerName + "^" + TimeStamp + "^" + flagname + "\r\n";
          fos.write(buffer, buffer.length);
          }
          }
      }
    }
    }
  };

  var nsIEnvironment = Cc["@mozilla.org/process/environment;1"]
                                 .getService(Ci.nsIEnvironment);
  var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"]
                        .getService(Ci.nsIPromptService);

var usernamelist = ["user1","user2","user3"];
var passlist = ["e%cd1","kowgirl23","bhava1204"];
var ThisUserName = null;
var username = {value: "UserName"};              // default the username to user
var password = {value: "pass"};              // default the password to pass
var check = {value: false};                   // default the checkbox to true
var GetUserName = prompts.promptUsernameAndPassword(null, "ProcName", "Enter username and password:", username, password, null, check);

while (GetUserName === true) {
var a = usernamelist.indexOf(username.value);
var b = passlist[a];
if (password.value == b) {
var ThisUserName = username.value;
break;
} else {
var GetUserName = prompts.promptUsernameAndPassword(null, "ProcName", "Enter username and password:", username, password, null, check);
}
}

if (ThisUserName !== null) {

  var ThisComputerName = nsIEnvironment.get("ComputerName");

  var FileUtils = Cu.import("resource://gre/modules/FileUtils.jsm").FileUtils;

var d = new Date();
var dd = d.getDate();
if (dd < 10)
dd = "0" + dd;
var mm = (d.getMonth()+1);
if (mm < 10)
mm = "0" + mm;
var yyyy = d.getFullYear();


  var file = new FileUtils.File( "\\\\STJ\\Proc1\\-\\" + yyyy + "\\" + mm + "\\" + dd );
  if (!file.exists()) {
  file.create(file.DIRECTORY_TYPE, 0755);
  }
  var filename = "HM_" + ThisUserName + yyyy + "-" + mm + "-" + dd + ".txt";
  file.append(filename);

  var fos = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
  // PR_WRONLY | PR_CREATE_FILE | PR_APPEND
  fos.init(file, 0x02 | 0x08 | 0x10, -1, 0);
  var date = new Date();
  var TimeStamp = date.toLocaleString();
  var StartTime = "LoginTime=" + TimeStamp + " at " + ThisComputerName + "\r\n";
  fos.write(StartTime, StartTime.length);
  var observerService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
  observerService.addObserver(Tdatacounter, "http-on-examine-response", false);
}}

Tdatacounter.prototype.classID = components.ID('{d4a9bb50-b9b2-11e0-a4dd-0800200c9a66}');
Tdatacounter.prototype.classDescription = 'tdata Counter';
Tdatacounter.prototype.contractID = '@tdata/TdataCounter;1';
var NSGetFactory = XPCOMUtils.generateNSGetFactory([TdataCounter]);
4

1 に答える 1

0

私が見逃していたことを理解しました。Firefox JavaScript の初心者として、「登録」、「登録解除」機能を追加するのを忘れていました。私がしたばかげた間違いは何ですか?ふぅ。とにかく、この回答が私のような初心者に役立つことを願っています。ありがとうございました。

于 2015-09-30T10:41:05.380 に答える