javascript - 在两个按钮之间单击时创建用户脚本以更改网站的样式表
问题描述
好的,所以我在环顾四周后编译了这段代码,以至少确保原则上从一个 css 源更改为另一个应该有效。代码是这样的:
主页
<html><head><link rel="Stylesheet" href="" type="text/css"
id="style"/>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jque
ry.min.js"></script>
<script type="text/javascript">
$(function () {
$('button').click(function () {
var txt = $(this).html();
if(txt=='Night Mode')
{
$('link#style').attr('href', 'https://dl.dropboxusercontent.com/s/izi0tg7r5foax78/two.css');
return false;
}
else if (txt == 'Day Mode') {
$('link#style').attr('href', 'https://dl.dropboxusercontent.com/s/gf7te23q27tht3w/one.css');
return false; }
});
});
</script>
<title>WOT</title><head>
<body>
LOL
<form id="form1" runat="server">
<div>
<h1>My Website</h1>
<br />
<button>Night Mode</button>
<button>Day Mode</button>
</div>
</form>
</body>
并且 CSS 1 和 2 只是在其中包含相同的行用于测试目的,只有颜色是不同的。
body {
background-color: blue;
}
我的问题是:当单击我想到的页面上的两个按钮之一时,如何将此代码编译成一个将更改 css 链接源的 usescript。
感谢您的帮助/时间:)
解决方案
希望这对您有所帮助。写了一个用户脚本来改变纯 Javascript 的主题。(刚刚基于 StackOverFlow 编写了 css)。
该脚本在所有页面的右上角添加了一个下拉列表。选择主题后,页面中的主题也会更新。将其保存在 Tampermonkey 中并重新加载此页面。
为常用的标签/ID/类(如body
, div
, .container
, .content
, .nav-bar
, )提供 css.sidebar
可能会使以下内容在多个站点中工作。
// ==UserScript==
// @name StackOverFlow
// @namespace VigeshRaja_UserScripts
// @version 0.1
// @description Testing
// @author Vignesh Raja
// @match http*://*/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
var selectelem = `<div class="themecolor">
<select id="themecolor" onchange="changeTheme()">
<option value="default">Default</option>
<option value="sunny">Sunny</option>
<option value="night">Night</option>
<option value="rosy">Rosy</option>
</select>
</div>`;
var basestyle = ".themecolor{position: fixed; top: 0; right: 0; z-index: 100000000; padding: 10px; background: #e43939;} body{background: $bodycolor$; color: $bodyfontcolor$;}#content{background-color: $contentcolor$;}";
var modes = {default: {bodycolor:"", bodyfontcolor: "", contentcolor:""},
sunny : {bodycolor:"f8d767", bodyfontcolor: "ffffff", contentcolor:"d4bb82"},
night : {bodycolor:"969590", bodyfontcolor: "ffffff", contentcolor:"585753"},
rosy : {bodycolor:"f59bda", bodyfontcolor: "ffffff", contentcolor:"f59bda"}};
function addStyle(style)
{
var headelem = document.getElementsByTagName("head")[0];
var styleelem = document.createElement("style");
styleelem.setAttribute("id","customtheme");
styleelem.type="text/css";
styleelem.appendChild(document.createTextNode(style));
headelem.appendChild(styleelem);
}
window.changeTheme = function(){
var style = basestyle;
var theme = document.getElementById("themecolor").value;
for(var colortype of Object.keys(modes[theme]))
{
style = style.replace("$"+colortype+"$", "#"+modes[theme][colortype]);
}
var customtheme = document.getElementById("customtheme");
if(customtheme)
{
customtheme.remove();
}
addStyle(style);
}
document.body.insertAdjacentHTML("beforeend",selectelem);
addStyle(basestyle);
})();
推荐阅读
- azure - 使用 Add-StorageTableRow 在 azure 表中添加一行
- firebase - 如何在 Flutter 中向 Firestore 添加不同的数据类型
- sql - 关于像'${year}%'这样的数字的SQL正则表达式
- python - 如何使用分组数据的后续行的值来决定使用pyspark的当前行的值
- javascript - 按键调用功能上的Jquery触发器
- java - Intent 在应用程序中不可用
- sql-server - 是否可以只恢复 sql server 数据库的一部分?
- python - dlib 安装 AWS EC2 实例 Ubuntu 16.04 时出错
- node.js - 具有相同代码结构的两个不同的导入模块共享相同的函数引用
- python - pandas.IntervalIndex.mid 用于半开 IntervalIndex