【创建免费的导航网站】通过Cloudflare(大善人)的workers创建一个专属的导航网站,无需购买VPS,不怕被攻击,完全开源免费,手把手演示如何创建设置并

By | 2024-03-08

MarkDown

视频教程https://www.youtube.com/watch?v=O75LZDfuZTs
这个github项目是4年前的项目,优秀的项目不应该被埋没,希望有人能继续完善接力开发下去 https://github.com/sleepwood/CF-Worke
CF大善人注册一个账号:https://dash.cloudflare.com/
github项目: 部署代码 https://raw.githubusercontent.com/sle
演示参考网站:https://kejikkk.com/

77777777777777以下复制
/**

  • 自定义网站配置
    */
    const config = {
    title: “天国居民导航”, //write your website title
    subtitle: “Cloudflare Workers Dir”, //write your website subtitle
    logo_icon: “sitemap”, //select your logo by semantic-ui icon (you can get more msg in:https://semantic-ui.com/elements/icon.html)
    hitokoto: true, //use hitokoto or not
    search:true, //enable search function
    search_engine:[ //choose search engine which you use
    {
    name:”谷 歌”,
    template:”https://www.google.com/search?q=$s
    },
    {
    name:”百 度”,
    template:”https://www.baidu.com/s?wd=$s
    },
    {
    name:”必 应”,
    template:”https://www.bing.com/search?q=$s
    },
    {
    name:”搜 狗”,
    template:”https://www.sogou.com/web?query=$s
    }
    ],
    selling_ads: true, //Selling your domain or not.(turning on may be helpful for selling this domain by showing some ads.)
    sell_info:{
    domain:”example.com”,
    price:500, //domain price
    mon_unit:”yen sign”, //monetary unit
    contact:[ //how to contact you
    {

    type:"envelope",               //contact type ("weixin","qq","telegram plane","envelope" or "phone")
    content:"info@example.com"
    

    }
    ]
    },
    lists: [ //Url list
    {
    name:”技术”,
    icon:”code”,
    list:[

    {
      url:"https://gemini.google.com/app",
      name:"谷歌gemini Bard",
      desc:"谷歌gemini Bard"
    },
    {
      url:"https://web.telegram.org/",
      name:"电报Telegram",
      desc:"电报网页Telegram Web"
    },
    {
      url:"https://github.com/",
      name:"github技术社区",
      desc:"程序员集散地"
    },
    {
      url:"https://dash.cloudflare.com/",
      name:"cloudflare网站",
      desc:"程序员集散地"
    },
    

    ]
    },
    {
    name:””,
    icon:”graduation cap”,

    list:[

    {
      url:"https://vercel.com/",
      name:"类似cloudflare部署",
      desc:"vercel网站"
    },
    {
      url:"https://discord.com/developers/applications",
      name:"discord开发平台",
      desc:"discord开发平台"
    },
    {
      url:"https://blogger.mqjk.com/",
      name:"天国居民的博客",
      desc:"程序员集散地"
    },
    {
      url:"https://zh.wikipedia.org/",
      name:"维基百科",
      desc:"维基百科"
    },
    

    ]
    },
    {
    name:””,
    icon:””,
    list:[

    {
      url:"https://news.google.com/home?hl=zh-CN&gl=CN&ceid=CN:zh-Hans",
      name:"谷歌新闻",
      desc:"谷歌新闻"
    },
    {
      url:"https://copilot.microsoft.com/",
      name:"copilot人工智能",
      desc:"copilot人工智能AI"
    },
    {
      url:"https://accounts.google.com/AccountChooser/signinchooser?service=mail&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&flowName=GlifWebSignIn&flowEntry=AccountChooser&ec=asw-gmail-globalnav-signin&theme=glif",
      name:"谷歌邮箱",
      desc:"谷歌邮箱gmail"
    },
    {
      url:"https://chat.openai.com/",
      name:"chatgpt官网",
      desc:"chatgpt官网openai"
    },
    

    ]
    },
    {
    name:””,
    icon:””,
    list:[

    {
      url:"https://oschina.net/",
      name:"开源中国",
      desc:"程序员集散地"
    },
    {
      url:"https://v2ex.com",
      name:"V2EX",
      desc:"程序员集散地"
    },
    {
      url:"https://www.photopea.com/",
      name:"ps网页版",
      desc:"ps网页版"
    },
    {
      url:"https://kantu.xunjiecad.com/",
      name:"CAD在线看图",
      desc:"CAD在线看图"
    },
    

    ]
    },

    {
    name:”学习”,
    icon:”graduation cap”,
    list:[

    {
      url:"https://www.123pan.com/",
      name:"123云盘",
      desc:"程序员集散地"
    },
    {
      url:"https://www.coze.com/space/",
      name:"coze网站",
      desc:"coze国际网站"
    },
    {
      url:"https://www.voachinese.com/p/6143.html",
      name:"美国之音",
      desc:"程序员集散地"
    },
    {
      url:"https://www.bbc.com/zhongwen/simp",
      name:"BBC中文",
      desc:"程序员集散地"
    },
    

    ]
    },
    {
    name:””,
    icon:””,
    list:[

    {
      url:"https://cn.wsj.com/",
      name:"华尔街日报",
      desc:"华尔街日报中文网"
    },
    {
      url:"https://blog.mqjk.com/",
      name:"CF博客",
      desc:"天国居民CF博客"
    },
    {
      url:"https://www.canva.com/",
      name:"在线设计平台",
      desc:"在线平面设计平台"
    },
    {
      url:"https://jianshu.com/",
      name:"简书",
      desc:"程序员集散地"
    },
    

    ]
    },
    {
    name:”学习”,
    icon:”graduation cap”,
    list:[

    {
      url:"https://www.youtube.com/",
      name:"youtube",
      desc:"youtube网站"
    },
    {
      url:"https://vfarid.github.io/cf-ip-scanner/",
      name:"优选ip",
      desc:"优选ip "
    },
    {
      url:"https://www.itdog.cn/",
      name:"在线ping",
      desc:"在线ping全国"
    },
    {
      url:"https://jianshu.com/",
      name:"简书",
      desc:"程序员集散地"
    },
    

    ]
    },
    {
    name:”学习”,
    icon:”graduation cap”,
    list:[

    {
      url:"https://www.youtube.com/",
      name:"youtube",
      desc:"youtube网站"
    },
    {
      url:"https://runoob.com/",
      name:"菜鸟教程",
      desc:"程序员集散地"
    },
    {
      url:"https://segmentfault.com/",
      name:"思否社区",
      desc:"程序员集散地"
    },
    {
      url:"https://jianshu.com/",
      name:"简书",
      desc:"程序员集散地"
    },
    

    ]
    },
    {
    name:”学习”,
    icon:”graduation cap”,
    list:[

    {
      url:"https://w3school.com.cn/",
      name:"W3school在线教程",
      desc:"程序员集散地"
    },
    {
      url:"https://runoob.com/",
      name:"菜鸟教程",
      desc:"程序员集散地"
    },
    {
      url:"https://segmentfault.com/",
      name:"思否社区",
      desc:"程序员集散地"
    },
    {
      url:"https://jianshu.com/",
      name:"简书",
      desc:"程序员集散地"
    },
    

    ]
    }
    ]
    }
    const el = (tag, attrs, content) => <${tag} ${attrs.join(" ")}>${content}</${tag}>;

async function handleRequest(request) {
const init = {
headers: {
‘content-type’: ‘text/html;charset=UTF-8’,
},
}
return new Response(renderHTML(renderIndex(),config.selling_ads? renderSeller() :null), init);
}
addEventListener(‘fetch’, event => {
return event.respondWith(handleRequest(event.request))
})

/*通过分析链接 实时获取favicon

/** Render Functions

  • 渲染模块函数
    */

function renderIndex(){
const footer = el(‘footer’,[],el(‘div’,[‘class=”footer”‘],’Powered by’ + el(‘a’,[‘class=”ui label”‘,’href=”https://github.com/sleepwood/cf-worker-dir"','target="_blank"'],el('i',['class="github icon”‘],””) + ‘Cf-Worker-Dir’) + ‘ © Base on ‘ + el(‘a’,[‘class=”ui label”‘],el(‘i’,[‘class=”balance scale icon”‘],””) + ‘MIT License’)));
return renderHeader() + renderMain() + footer;
}

function renderHeader(){
const item = (template,name) => el(‘a’,[‘class=”item”‘,data-url="${template}"],name);

var nav = el(‘div’,[‘class=”ui large secondary inverted menu”‘],el(‘div’,[‘class=”item”‘],el(‘p’,[‘id=”hitokoto”‘],’条条大路通罗马’)))
var title = el(‘h1’,[‘class=”ui inverted header”‘],el(‘i’,[class="${config.logo_icon} icon"],””) + el(‘div’,[‘class=”content”‘],config.title + el(‘div’,[‘class=”sub header”‘],config.subtitle)));
var menu = el(‘div’,[‘id=”sengine”‘,’class=”ui bottom attached tabular inverted secondary menu”‘],el(‘div’,[‘class=”header item”‘],’ ’) + config.search_engine.map((link,key) =>{
if(key == 0){
return el(‘a’,[‘class=”active item”‘,data-url="${link.template}"],link.name);
}else{
return item(link.template,link.name);
}
}).join(“”))
var input = el(‘div’,[‘class=”ui left corner labeled right icon fluid large input”‘],el(‘div’,[‘class=”ui left corner label”‘],el(‘img’,[‘id=”search-fav”‘,’class=”left floated avatar ui image”‘,’src=”https://www.baidu.com/favicon.ico“‘],””)) + el(‘input’,[‘id=”searchinput”‘,’type=”search”‘,’placeholder=”搜索你想要知道的……”‘,’autocomplete=”off”‘],””) + el(‘i’,[‘class=”inverted circular search link icon”‘],””));
return el(‘header’,[],el(‘div’,[‘id=”head”‘,’class=”ui inverted vertical masthead center aligned segment”‘],(config.hitokoto ? el(‘div’,[‘id=”nav”‘,’class=”ui container”‘],nav) : “”) + el(‘div’,[‘id=”title”‘,’class=”ui text container”‘],title + (config.search ? input + menu :””) + ${config.selling_ads ? '<div><a id="menubtn" class="red ui icon inverted button"><i class="heart icon"></i> 喜欢此域名 </a></div>' : ''})))
}

function renderMain() {
var main = config.lists.map((item) => {
const card = (url,name,desc)=> el(‘a’,[‘class=”card”‘,href=${url},’target=”_blank”‘],el(‘div’,[‘class=”content”‘],el(‘img’,[‘class=”left floated avatar ui image”‘,src=${getFavicon(url)}],””) + el(‘div’,[‘class=”header”‘],name) + el(‘div’,[‘class=”meta”‘],desc)));
const divider = el(‘h4’,[‘class=”ui horizontal divider header”‘],el(‘i’,[class="${item.icon} icon"],””)+item.name);

var content = el('div',['class="ui four stackable cards"'],item.list.map((link) =>{
  return card(link.url,link.name,link.desc);
}).join(""));

return el('div',['class="ui basic segment"'],divider + content);

}).join(“”);

return el(‘main’,[],el(‘div’,[‘class=”ui container”‘],main));
}

function renderSeller() {
const item = (type,content) => el(‘div’,[‘class=”item”‘],el(‘i’,[class="${type} icon"],””) + el(‘div’,[‘class=”content”‘],content));
var title = el(‘h1’,[‘class=”ui yellow dividing header”‘],el(‘i’,[‘class=”gem outline icon”‘],””) + el(‘div’,[‘class=”content”‘],config.sell_info.domain + ‘ 正在出售’));
var action = el(‘div’,[‘class=”actions”‘],el(‘div’,[‘class=”ui basic cancel inverted button”‘],el(‘i’,[‘class=”reply icon”‘],””) + ‘返回’));

var contact = config.sell_info.contact.map((list) => {
return item(list.type,list.content);
}).join(“”);
var column = el(‘div’,[‘class=”column”‘],el(‘h3’,[‘class=”ui center aligned icon inverted header”‘],el(‘i’,[‘class=”circular envelope open outline grey inverted icon”‘],””) + ‘联系我’) + el(‘div’,[‘class=”ui relaxed celled large list”‘],contact));
var price = el(‘div’,[‘class=”column”‘],el(‘div’,[‘class=”ui large yellow statistic”‘],el(‘div’,[‘class=”value”‘],el(‘i’,[class="${config.sell_info.mon_unit} icon"],””) + config.sell_info.price)));
var content = el(‘div’,[‘class=”content”‘],el(‘div’,[‘class=”ui basic segment”‘],el(‘div’,[‘class=”ui two column stackable center aligned grid”‘],el(‘div’,[‘class=”ui inverted vertical divider”‘],’感兴趣?’) + el(‘div’,[‘class=”middle aligned row”‘],price + column))));

return el(‘div’,[‘id=”seller”‘,’class=”ui basic modal”‘],title + content + action);
}

function renderHTML(index,seller) {
return <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>${config.title} - ${config.subtitle}</title> <link href="https://cdn.jsdelivr.net/npm/semantic-ui-css@2.4.1/semantic.min.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/gh/sleepwood/cf-worker-dir@0.1.1/style.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/semantic-ui-css@2.4.1/semantic.min.js"></script> </head> <body> ${index} ${config.selling_ads ? seller : ''} <script src="https://v1.hitokoto.cn/?encode=js&select=%23hitokoto" defer></script> <script> $('#sengine a').on('click', function (e) { $('#sengine a.active').toggleClass('active'); $(e.target).toggleClass('active'); $('#search-fav').attr('src',$(e.target).data('url').match(+/https{0,1}:\/\/\S+\//+)[0] + '/favicon.ico') ; }); $('.search').on('click', function (e) { var url = $('#sengine a.active').data('url'); url = url.replace(+/\$s/+`,$(‘#searchinput’).val());
window.open(url);
});
/ 鼠标聚焦时,回车事件 /
$(“#searchinput”).bind(“keypress”, function(){
if (event.keyCode == 13){
// 触发需要调用的方法
$(“.search”).click();
}
});
$(‘#menubtn’).on(‘click’, function (e) {
$(‘#seller’).modal(‘show’);
});
</script>
</body>

</html>`
}