2012-01-20 43 views
5

Tôi muốn cho phép người dùng ứng dụng của tôi viết các plugin trong Javascript để mở rộng chức năng của nó mà không cho phép truy cập vào bất kỳ thứ gì ngoài một đối tượng API plugin mà tôi cung cấp. Ví dụ, một plugin có thể trông như sau:Sử dụng caja để khử trùng Javascript?

plugin.hookSomeUserAction(function() { 
    plugin.doSomethingWickedAwesome(); 
    document.title = 'hacked!'; //shouldn't work 
}); 

Caja vẻ như nó sẽ có thể hoàn thành công việc, nhưng các tài liệu có lẽ là tồi tệ nhất của bất kỳ dự án mã nguồn mở Tôi đã nhìn thấy (khá một thành tựu!). Tôi cần một số trợ giúp để thiết lập hệ thống.

Tôi đã nhận được cajoler làm việc trên dòng lệnh, và tôi đã cajoled một plugin như vậy vào một số loại Javascript hyunized hy vọng. Javascript cajoled có vẻ như nó đang mong đợi một đối tượng "IMPORTS___" được cung cấp, nên chứa tất cả nội dung mà plugin có quyền truy cập. Khá hứa hẹn cho đến nay!

Thật không may, nhận được tệp Javascript cajoled thực sự tải và chạy đã biến thành một mớ hỗn độn thực sự. Đoạn mã nguồn in the docs không may là hoàn toàn sai, vì hàm loadCaja không thực sự xuất hiện ở bất kỳ nơi nào trong nhánh hiện tại của google-caja. Tôi theo dõi xuống một số mã có ít nhất làm một cái gì đó :

<div id="plugin"></div> 
<script> 
    caja.configure({ 
     cajaServer: "/js/caja" 
    }, function(frameGroup) { 
     frameGroup.makeES5Frame(document.getElementById('plugin'), 
      { /* No network access */ }, 
      function(frame) { 
       frame.url('/js/plugins/test.js') 
        .run({}); 
      } 
     ); 
    }); 
</script> 

Thật không may, điều này không phải là nỗ lực để có được những cajoler lại phỉnh phờ javascript mà tôi đã thuyết phục những. Tôi chắc chắn là không phải quan tâm đến việc máy chủ lại cajole mọi plugin trên mọi yêu cầu; Tôi sẽ chỉ cajole nó khi tải lên và lưu trữ nó đi sẵn sàng để sử dụng.

Tôi cũng không thể tìm thấy bất kỳ tài liệu nào về cách hoặc nơi để chỉ định những gì đi vào IMPORTS___ (cho rằng đó là toàn bộ mô hình bảo mật, có vẻ như một sự giám sát lạ trong tài liệu). Đó có phải là đối tượng được truyền vào .run() không?

Trả lời

0

Funnily đủ kiến ​​thức duy nhất của tôi về Caja đến từ góc độ có đọc mã nguồn của SES chỉ và không biết về ngữ cảnh sử dụng của nó. Tôi tìm thấy mã nguồn để được tài liệu cực kỳ tốt như trái ngược với bất kỳ tài liệu nào hoặc không tồn tại bên ngoài.

http://code.google.com/p/es-lab/source/browse/trunk/src/ses/initSES.js

+1

Tôi có thể hỏi, SES là gì? – Coffee

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