2012-07-06 21 views
6

Tôi đang cố gắng sửa đổi một tin nhắn trước khi nó được hiển thị trong cửa sổ chính trong Thunderbird. Tôi dường như không thể tìm thấy 1) Một sự kiện sẽ được kích hoạt khi một tin nhắn mới được mở/xem 2) Một cách để sửa đổi nội dung được hiển thị của một tin nhắn.Sự kiện ThunderBird để xem một tin nhắn

Tôi tin rằng tôi cần lớp phủ chrome://messenger/content/messenger.xul, và có thể sử dụng một người biết lắng nghe như: (a message header)

window.addEventListener("SOME MAGIC HERE", modify_message_handler, true); 

Nhưng sự kiện đó là, tôi không chắc chắn, cùng với những gì đối tượng tôi sẽ nhận được và tôi có thể dễ dàng sửa đổi những gì được hiển thị.

Vì vậy, câu hỏi là:

  • Tôi có lớp phủ có đúng không?
  • Điều này có thể được thực hiện với các sự kiện không? Nếu không, làm thế nào?
  • Nếu có, cần có sự kiện gì và vượt qua đối tượng nào?
+1

bạn đã tìm thấy https://developer.mozilla.org/en/DOM/DOM_event_reference chưa? –

+0

@ john.k.doe Tôi đã không thấy điều đó, cảm ơn bạn. –

Trả lời

7

Nếu những gì bạn muốn là một cái gì đó tương tự như một kịch bản Greasemonkey mà có thể chạy trên tất cả các tin nhắn, bạn nên:

  1. Chờ cho sự kiện load của window.
  2. Truy xuất đối tượng khung thư với document.getElementById("messagepane").
  3. Liên kết trình xử lý của bạn với sự kiện DOMContentLoaded của ngăn thư hoặc các sự kiện tương tự như load tùy thuộc vào thời điểm bạn muốn trình xử lý của mình được gọi chính xác. DOMContentLoaded sẽ cho bạn một hành vi kiểu Greasemonkey.
  4. Trong trình xử lý sự kiện, event.originalTarget là tài liệu tương ứng với thông báo được hiển thị. Bạn có thể áp dụng tất cả các kỹ thuật sửa đổi DOM thông thường tại đây.

Để biết thêm chi tiết, hãy xem this example từ tài liệu.

+0

Điều đó dường như là điểm vào mà tôi cần - Tôi sẽ cung cấp cho nó một đi (trong thời gian tới) và báo cáo lại. Cảm ơn bạn. –

5

Không rõ nơi bạn đã thử tìm kiếm, nhưng tôi sẽ đề xuất: this outdated documentation gợi ý có sự kiện OnItemPropertyChanged mà bạn có thể nhấn vào để nghe thuộc tính "mở" được xác định trong the source.

Dù điều này chỉ áp dụng cho các thư mục hoặc cả thư mục và thư, tuy nhiên, không rõ ràng; và bạn sẽ phải đào sâu hơn để tìm hiểu xem các thuộc tính của đối tượng mục được truyền vào sẽ cho phép bạn thực hiện thay đổi hay không.

Hy vọng rằng sẽ có một số ánh sáng; nếu bạn đã vượt qua điều đó, vui lòng cho chúng tôi biết những gì bạn đã học được.

+0

Cảm ơn các con trỏ. Tôi sẽ báo cáo lại nhưng có thể không phải trong vài ngày - tôi đang tung hứng một số công việc ngay bây giờ. –

+0

Xem câu trả lời của tôi http://stackoverflow.com/questions/11370903/thunderbird-event-for-viewing-a-message/11514251#11514251 cho những gì tôi đã tìm thấy. –

3

Tôi sẽ chủ yếu giải quyết các thẻ thunderbird-extension trong Câu hỏi của bạn.

Thunderbird Tác giả mở rộng Paolo "Kaosmos" có nhiều công cụ sẵn sàng để bạn xem xét.


HeaderToolsLite:

Các tính năng chỉnh sửa (chỉ thay đổi tiêu đề hoặc mã toàn bộ nguồn của thông điệp) có thể truy cập từ menu "Message" -> "HeaderToolsLite" hoặc từ menu ngữ cảnh trong bảng thông báo.

Chức năng chỉnh sửa của toàn bộ mã nguồn nên được sử dụng với thận trọng, bởi vì thay đổi sai có thể gây ra sự cố khi hiển thị tất cả thư trong thư mục.



Attach Extra Tools:

attach easily messages selected in the main window<br /> 
attach attachments from other messages<br /> 
attach files from 5 favourite directories<br /> 
attach files and directories in zipped format<br /> 



DSN OPTIONS GUI:

một phần mở rộng có thêm một giao diện đồ họa để xử lý các sở thích, cả hai toàn cầu và cho mỗi tài khoản, về "Status Delivery Notification" (DSN).



Liên kết hữu ích:
đáng chú ý tham khảo 1:Common use cases to modify messages
đáng chú ý tham khảo 2:Thunderbird API for Message Window and Message Header
đáng chú ý tham khảo 3:Building a Thunderbird Extension
đáng chú ý tham khảo 4:Using XUL Thunderbird UI in your Extension

1

Generic Nhân đặt tôi xuống con đường đúng với sự liên kết rất cần thiết. Điều đầu tiên là thêm sự kiện load. Tôi sẽ dán một số mã với sự hiểu biết sơ khai của mình:

window.addEventListener("load", function load(event) { 
     window.removeEventListener("load", load, false); 
     myExtension.init(); 
}, false); 

Khi lớp phủ của tập lệnh này tải, chạy init.

var myExtension = { 
    init: function() { 
     var appcontent = document.getElementById("appcontent"); // browser app content 
     if (appcontent) { 
       appcontent.addEventListener("OMContentLoaded", myExtension.onPageLoad, true); 
     } 
     var messagepane = document.getElementById("messagepane"); // tunderbird message pane 
     if(messagepane) { 
       messagepane.addEventListener("load", function(event) { myExtension.onPageLoad(event); }, true); 
     } 
    }, 

Trong init tôi thêm một người biết lắng nghe mà các cuộc gọi onPageLoad mỗi khi một thông điệp được hiển thị. Tôi không thực sự sử dụng trường hợp appcontent afaik.

onPageLoad: function(aEvent) { 
       var doc = aEvent.originalTarget; // doc is document that triggered "onload" event 
       // we can now morph the loaded page 
       // doc.location is a 'Location' object 
       var newDat = mutateBody(doc.body.innerHTML); 
       doc.body.innerHTML = newDat; 
       aEvent.originalTarget.defaultView.addEventListener("unload", function(event) { myExtension.onPageUnload(event); }, true); 
    }, 

    onPageUnload: function(aEvent) { 
    // No action necessary yet 
    } 
}; 

Các doc.body.textContents dường như một yếu tố hiển nhiên, nhưng nó thực sự đã không duy trì định dạng (darn HTML) - sử dụng innerHTML công trình tốt hơn cho nhu cầu của tôi.

Các vấn đề liên quan