2014-10-07 41 views
0

我需要在我的pagemod排除http://forum.blockland.us/*sa=*Firefox插件-SDK pagemod Matchpattern /通配符錯誤

但總有這樣的錯誤:

Error: There can be at most one '*' character in a wildcard. 

這裏是我main.js:

var pageMod = require("sdk/page-mod"); 

pageMod.PageMod({ 
    include: "http://forum.blockland.us/index.php?action=profile*", 
    exclude: "http://forum.blockland.us/*sa=*", 
    contentScript: 'document.body.innerHTML = ' + 
       ' "<h1>Page matches ruleset</h1>";' 
}); 

它似乎是導致錯誤的*sa=*。我不知道如何解決這個問題。

如果答案是有正則表達式或匹配模式,我想知道如何將它包含在我的main.js中。謝謝。

回答

1

page-mod文檔表示的includeexclude屬性可爲任何的字符串(以有限的通配符),一RegExpregular expression),或這些類型的陣列。您可以更詳細地瞭解match-patterns on the MDN page describing them。因此,以符合你想要什麼,你可以在exclude屬性,而不是將字符串和通配符使用正則表達式:

var pageMod = require("sdk/page-mod"); 

pageMod.PageMod({ 
    include: "http://forum.blockland.us/index.php?action=profile*", 
    exclude: /http:\/\/forum\.blockland\.us\/.*sa=.*/, 
    contentScript: 'document.body.innerHTML = ' + 
       ' "<h1>Page matches ruleset</h1>";' 
}); 

正如你可以從上面的,RegExp看到的,只不過是另一種類型的standard built-in object。它們可以在您的代碼中作爲文字輸入。您也可以使用構造:
var myRegularExpression = new RegExp(pattern [, flags]);

例如:

var excludedPages = /http:\/\/forum\.blockland\.us\/.*sa=.*/;

var excludedPages = new RegExp ("http:\\/\\/forum\\.blockland\\.us\\/.*sa=.*");

注意,表示您將用作輸入到new RegExp()構造函數的字符串時,如果在您的源代碼中表示字符串,則需要雙倍的反斜槓「\」。這是因爲在解釋代碼時,文本轉換爲String文字使用\來指示下一個字符是特殊的。因此,需要雙反斜槓\\來指示實際反斜槓\應位於String中。這將導致:

var pageMod = require("sdk/page-mod"); 
var excludedPages = /http:\/\/forum\.blockland\.us\/.*sa=.*/; 

pageMod.PageMod({ 
    include: "http://forum.blockland.us/index.php?action=profile*", 
    exclude: excludedPages, 
    contentScript: 'document.body.innerHTML = ' + 
       ' "<h1>Page matches ruleset</h1>";' 
}); 
+0

我不得不在你的正則表達式的結尾去除它的工作。否則,我得到這個錯誤:'消息:錯誤:一個RegExp匹配模式不能設置爲「ignoreCase」(即/ /我)。' – Farad 2014-10-07 23:29:50

+0

是的,我應該閱讀[文檔](https://developer.mozilla .org/en-US/Add-ons/SDK/High-Level_APIs/page-mod)([match-pattern](https://developer.mozilla.org/en-US/Add-ons/SDK/Low- Level_APIs/util_match-pattern))稍微靠近一點。全局標誌('g'),ignoreCase('i')和多行標誌('m')都不允許使用。感謝您指出了這一點。我已經更改了上面的代碼來反映這一點,並更新了MDN中的文檔以將RexExp顯示爲允許的類型(它不在顯式類型聲明中,但在文本中提到)。 – Makyen 2014-10-07 23:45:00