2013-08-24 17 views
1

对于我的Chrome扩展程序,我需要匹配任何有效的Gmail邮件网址格式。例如:Chrome扩展程序:与Gmail邮件匹配的网址格式的内容脚本

https://mail.google.com/mail/u/0/?shva=1#inbox/140acd877b64109b

我试图manifest.json如下:

"content_scripts": [ { 
     "matches":  ["*://*.mail.google.com/mail/u/0/?shva=1#inbox/*"], 
     "css":   ["default.css"] 
    } ] 

然而,当我访问Gmail邮件上面的URL模式我的自定义样式表不适用。

任何想法,为什么它不适用?

如果我只使用"matches": ["*://*.mail.google.com"],那么它的工作原理。但我不希望将样式表应用于我的收件箱页面。因此,我正在寻找一种模式来捕捉单个消息页面。

回答

3

位置片段(#...)是总是在匹配模式中被忽略。 Last time I checked,对于"css"字段,查询字符串也被忽略。

为了达到预期效果,只需在"*://*.mail.google.com/*"上插入样式表,并使用内容脚本来检测URL更改。例如:

片段的manifest.json

default.css
"content_scripts": [ { 
    "matches":  ["*://*.mail.google.com/*"], 
    "css":   ["default.css"], 
    "js":   ["style-toggler.js"] 
} ] 

.turn-on-my-style img { 
    visibility: hidden; 
} 

如果前缀你的CSS选择器需要太多的努力,我建议使用一个CSS预处理器一样LESS

style-toggler.js

function hashCheck() { 
    if (/^#inbox\/.*/.test(location.hash)) { 
     document.documentElement.classList.add('turn-on-my-style'); 
    } else { 
     document.documentElement.classList.remove('turn-on-my-style'); 
    } 
} 
window.addEventListener('hashchange', hashCheck); 
hashCheck(); 
+0

感谢罗布。但是我不完全理解样式表的内容。在我的扩展中,我想向现有的类“.aeH”添加一个“margin-top”属性,但是如上所述,只有当我不在收件箱中。据我了解你的例子,它添加或删除一个新的类,但不修改现有类的属性。 – orschiro

+0

@orschiro使用自定义类名称('.turn-on-my-style',在我的示例中)将每个原始样式表的选择器前缀。然后,通过向祖先元素添加或删除类名称(根元素,在我的示例中为',document.documentElement),可以有效地切换样式。 –

+0

现在我明白你的意思了。它工作得很好!谢谢。在'default.css'中,我添加了'.toggleClass .aeH {margin:margin}:55px!important;我在'default.js'中添加了'classList.add('toggleClass');' – orschiro

相关问题