2010-06-16 31 views
5

Tôi đang cố gắng mã hóa tiện ích mở rộng Safari tương tự như Bubble Translate cho Chrome.Tiện ích mở rộng Safari - Có quá nhiều tập lệnh được tiêm trả lời thư

khi bạn nhấp vào nút trên thanh công cụ, nó sẽ tự động dịch văn bản hiện được chọn sang ngôn ngữ bạn chọn bằng API ngôn ngữ của Google.

tôi sử dụng kịch bản tiêm sau để có được văn bản nêu bật và hiển thị kết quả (như một cảnh báo trong thời gian tới): http://pastebin.com/bYVuQAmp

tôi sử dụng kịch bản toàn cầu sau để gọi script tiêm nếu cần thiết: hxxp: //pastebin.com/VHaAKM5a

tôi có vấn đề như sau:

kịch bản không chỉ được đưa vào trang chính mà còn vào các quảng cáo và các công cụ tương tự được nhúng vào trang. Do đó, văn bản được chọn được dịch nhiều lần bởi vì tất cả các tập lệnh được nhúng trong một trang đều phản hồi thư.

Làm cách nào để đảm bảo rằng tập lệnh chỉ được chèn vào đúng trang hoặc chỉ đúng trang phản hồi?

Cảm ơn bạn,

Philipp

Trả lời

1

Có lẽ bạn có thể kiểm tra xem các trang trong đó kịch bản được tiêm không phải là bên trong một khung:

if (window == window.parent) { /* you're not inside a frame! */ } 

Tôi không chắc chắn nếu nó hoạt động từ bên trong <object> thẻ nhúng HTML mặc dù. Rất có thể là có.

3

Khi kịch bản toàn cầu đáp ứng các thông điệp từ các tập lệnh tiêm, bao gồm url mục tiêu tab trong thông điệp trả lời, như vậy:

var message = { 
    translation: result.translation, 
    url: event.target.url 
} 
event.target.page.dispatchMessage("displayTranslation", message); 

Sau đó, trong xử lý thông điệp kịch bản tiêm của, hãy kiểm tra url được gửi trong thông điệp khớp với url của trang, như vậy:

if (event.name === "displayTranslation" && 
    event.message.url === window.location.href) { 
    alert(event.message.translation); 
} 

Bằng cách đó, chỉ tập lệnh trong khung có nguồn gốc yêu cầu mới phản hồi.

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