2012-02-29 4 views
1

im разрабатывает небольшой аддон для Firefox с помощью addon-sdk, предоставляемый mozilla. Аддон должен работать только на одном конкретном веб-сайте, и ему необходимо заблокировать js-файл с этого веб-сайта. Я ищу часы о том, как заблокировать такой запрос.Блок JS с Firefox Addon

Надеюсь кто-то знает ответ

+0

Блокировка запросов является то, что вы обычно делаете путем создания компонента XPCOM реализующий [nsIContentPolicy] (HTTPS : //developer.mozilla.org/en/XPCOM_Interface_Reference/nsIContentPolicy). Это очень нетривиально, но SDK не дает вам никаких инструментов для этого. –

ответ

1

Да, вы должны были бы сделать это в основном вручную. SDK вообще не поможет вам, но это возможно.

Это похоже на то, что вам нужно сделать. Обратите внимание, что это не проверено и не будет работать из коробки, а просто для того, чтобы дать вам представление о том, какие компоненты задействованы и где найти больше ресурсов.

const { Cc, Ci, Cm, components } = require("chrome"); 
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this); 
const CategoryManager = Cc["@mozilla.org/categorymanager;1"] 
           .getService(Ci.nsICategoryManager); 

function PolicyComponent() { } 

PolicyComponent.prototype = { 
    desc:    "My nsIContentPolicy XPCOM Component", 
    classID:   components.ID("{3ffd2f60-3784-11e1-b86c-0800200c9a66}"), 
    contractID:  "@abc.def.com/policycomp;1", 
    QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPolicy]), 

    shouldLoad: function(contentType, contentLocation, requestOrigin, aContext, mimeTypeGuess, extra) { 
    if (contentLocation.spec != BLOCKED_JS) { return return Ci.nsIContentPolicy.ACCEPT; } 
    else { return Ci.nsIContentPolicy.REJECT_REQUEST; } 
    }, 
    shouldProcess: function() { 
    return CI.nsIContentPolicy.ACCEPT; 
    } 
} 

var pc = new PolicyComponent() 

// Register the Interface 
Cm.QueryInterface(Ci.nsIComponentRegistrar).registerFactory(pc.uuid, pc.desc, pc.contractID, pc); 

// Add the content policy 
CategoryManager.addCategoryEntry("content-policy",pc.className,pc.contractID, true, true); // not sure you should replace (last true statement) 

Посмотреть этот пост более: What is missing in my nsIContentPolicy Firefox/IceWeasel extension XPCOMponent implementation for the shouldLoad to be called?

Также обратите внимание на эти документы: https://developer.mozilla.org/en/XUL_School/Intercepting_Page_Loads#Content_Policy