javascript - 如何共享 HTML/CSS/JS 的标头?
问题描述
我正在工作中开始一个新项目,我们的任务是创建一个通用标题。这意味着在我们拥有的不同域/服务器、客户创建的站点和第三方站点上,我们需要一种非常简单的方法来将此代码提供给人们。
这个通用标题还将包含一些搜索功能,这与我的问题略有相关。简而言之,它将包含 JavaScript 来更改action
其元素的属性<form>
,具体取决于下拉选择,以及提交表单。
我们希望标头工作的方式是,它位于一个位置,我们正在考虑某种 HTTP 请求来获取标头。在我们看来,这将最大限度地提高 Universal Header 的可移植性。
标头需要与 WordPress 很好地集成(不是问题),但也需要与 AngularJS 集成,在我们的讨论中,不太确定这是否可行。因此,搜索功能的“稍微相关”部分。
我们讨论的解决方案之一是在 HTML 中执行此答案,但我一直对通过 HTTP 请求原始 HTML 并只是将其转储到页面中感到更加不安,但也许这是正确的方法,但也许不是?由于我们不确定,我们考虑了JIRA 问题收集器,他们基本上将 JavaScript 流式传输给客户,然后构建问题跟踪器按钮,固定在包含一些 HTML、CSS 和 JS 的页面的一侧。然后,用户可以单击此按钮,这将打开一个准备提交的表单。这可能过于简单,但基本上,他们的 JS 代码片段打包 HTML/CSS/JS 并将数据提交到他们的服务器。
这是我们想要的方向:让一个文件包含我们需要的所有内容。但是,我想知道一些事情:
- 有哪些模式可以处理标题的“闪光”?由于它是在页面加载时进行 AJAX 处理的,因此标题会丢失然后突然出现,您如何处理该可用性问题?我在想标题所在的骨架区域,然后让 JavaScript 替换它,但我不知道这是否是陈词滥调。
- 将 HTML、CSS 和一些 JavaScript 功能都包含在单个文件(如 JS 文件)中的创建捆绑在一起的标准方法是什么,或者更好地将 HTML 文件链接到 JS 和样式表?我只是不确定捆绑件。我们不会在这个项目中使用 Angular 或 React,但我确实对 Webpack 有点熟悉,这似乎可以完成这项工作,也许。即使这个项目不会使用 Angular 或 React,它仍然需要与其他框架集成。
- 我正在考虑的一件事可能是将 HTML 分解为一个单独的 HTTP 请求,并将 JavaScript 和样式捆绑在另一个 HTTP 请求中——几乎就像一个 Web 组件。换句话说,我们可以并行请求 HTML 和 CSS/JS,当它返回时,只需在 UI 中将它们组合在一起即可。这样做有什么危险,或者这样做时需要考虑的一些事情?
- 将它与 AngularJS 集成的好方法是什么?由于此标头中将包含搜索功能,因此我们需要某种方式在有人提交搜索时(向 AngularJS)广播,以及他们提交的搜索是什么。
最初,对于上面的最后一点,我正在考虑将它附加到一个window
对象上。然后在 JavaScript 中创建一个自定义事件处理程序——但是你是怎么做的呢?也许下面的伪代码离基地很远,但这就是我问这个问题的原因:
/// inside the SearchController in AngularJS
$scope.defaultRealm = 'products';
/// to select default realm
document.when('angularJSLoads', function () {
document.getElementById('universial-header').find('.dropdown', function () {
// put actions to select $scope.defaultRealm in the dropdown options.
})
})
/// to search in own defaultRealm
document.querySelector('.dropdown').onEvent('headerSearch', function (e) {
e.preventDefault();
var data = event.target.value;
// do searching in AngularJS
})
如果有一些更好,更清洁的方法,我会很高兴听到它。
我很感激这方面的任何帮助。这对我们来说是一个新领域,总的来说,我们希望能够拥有一个高度可维护的标头,可以轻松地与不同的域等共享。
解决方案
就个人而言,这就是我将如何处理它。
我将在要加载标题的所有页面上创建一个计划加载到的容器。该容器应该有某种背景表明它未加载(通常这是灰色的,但您的 UX 案例可能不同)
然后,要实际交付您的标头,请使用 JS 构建它。
创建一个 JS 文件(比如 buildHeader.js),其中包含编写您的 html、向您的 css 写入请求以及为您的附加 js 写入请求的代码。
推荐阅读
- c - 在 c 中搜索 char* 以查找 char* 数组的成员
- python - 如何读取带有 .zip 扩展名的 URL 并获取文件 .txt 并将其保存在目录中?
- python - ValueError:具有多个元素的数组的真值不明确。在 If 条件中使用相等时出错
- python - 是否可以从一个列表中复制一个项目并多次放入另一个列表中,然后单独修改每个项目?
- javascript - 如何在node.js中自动将图像从目录上传到axios
- android - RecyclerView 中项目之间的空间
- javascript - 响应式固定导航栏,子菜单列表不滚动
- php - 迁移后的 Magento 问题
- flutter - 单击(多次)时如何在颤动中更改卡片小部件的颜色?
- python - 将用户的文本输入值传递给 selenium 脚本的搜索方面时遇到问题