2012-01-22 30 views
5

Có thể tạo tập lệnh nội dung chỉ khi kiểu nội dung của tài liệu khớp với mẫu cụ thể không? Trên thực tế, mục tiêu của tôi đơn giản hơn nhiều: tôi cần tập lệnh nội dung của mình được tiêm vào tài liệu HTML chỉ (hiện tại, nó cũng được đưa vào tài liệu XML). Tập lệnh nội dung phải được tiêm tại "document_start".Làm cách nào để giới hạn tập lệnh nội dung tiện ích của Chrome thành một loại nội dung cụ thể?

Trả lời

1

Tôi đã gặp phải sự cố tương tự và đã giải quyết vấn đề theo cách sau.

Thay vì giới hạn nhiều tài liệu mà tập lệnh nội dung được tiêm, dựa trên tài liệu 'Content-Type, tôi quyết định đưa tập lệnh vào tất cả các tài liệu, nhưng chỉ thực thi nó theo đúng cách.

này được thực hiện bằng cách phân tích document.xmlVersiondocument.doctype tính:

  • document.doctype phải không null trong một tài liệu HTML;
  • document.xmlVersion không được là null trong tài liệu XML;

Vì vậy, rất dễ sử dụng một trong hai cách để phân biệt một loại với loại khác và "ràng buộc" tất cả nội dung tập lệnh cần thiết chỉ khi thích hợp. Đặc biệt, người ta có thể tiêm bộ tải script nhỏ, mà sẽ tải thêm, có thể nặng thứ, có điều kiện.

Chrome không cung cấp bất kỳ phương tiện nào để hạn chế việc chèn tập lệnh theo loại tài liệu.

0

Cách hiệu quả nhất để thực hiện việc này là qua chrome.webRequest.onHeadersReceived, cho phép bạn truy vấn và giữ lại thông tin tiêu đề phản hồi (bao gồm Content-Type). Rất tiếc, API này hiện không có sẵn trong bản phát hành ổn định của Chrome. (Bạn có thể sử dụng API thử nghiệm trong các phiên bản hiện tại của Chrome, nhưng bạn sẽ không thể xuất bản các tiện ích mở rộng sử dụng nó.)

Một giải pháp khả thi cho bạn là xác định liệu tài liệu được tiêm có đang được Chrome xử lý hay không dưới dạng XML. (Và nếu có, hãy ngừng xử lý tài liệu.) Một hack để thực hiện điều này là kiểm tra xem document.getElementById('webkit-xml-viewer-source-xml') có phải là null hay không. Phần yếu tố này của trình xem XML của Chrome/webkit.

+0

Điều gì xảy ra nếu tập lệnh nội dung của bạn thêm trình xử lý sự kiện để đợi tài liệu được tải trước khi thực hiện một hành động? Ví dụ, 'document.addEventListener (" DOMContentLoaded ", function() {do.stuff()};'. – cheeken

+0

Đây là những gì tôi nên tránh, kịch bản của tôi phải được thực hiện trước tiên (trước khi tài liệu được tải) – spektom

+0

Tôi hiểu. Trong trường hợp đó, tôi không có đề xuất nào khác. – cheeken

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