[英]How to update the meta tag in ionic dynamically? So that it can work in facebook social sharing
在 ionic 项目中,只有一个head
部分用于编写index.html
页面中的所有meta tag
。 例如,为了让 Facebook 分享完美工作,我们需要给定这个meta tag
:
<meta property="og:title" content="Title">
<meta property="og:description" content="description">
<meta property="og:image" content="Image Url you want to show">
<meta property="og:url" content="http://yourUrl.com">
那么我们如何从其他页面更新这个元标记呢? 例如,如果我们转到news detail
页面,该页面的meta tag
将相应更改。 那么如何在我的 Ionic4 中使用 angular 项目实现这一点呢?
我相信你可以用类似的方式做到这一点:
var link = document.createElement('meta');
link.setAttribute('property', 'og:url');
link.content = document.location;
document.getElementsByTagName('head')[0].appendChild(link);
在我现有的Ionic 4
项目中,我想使用Angular Universal
但我遇到了很多错误。 所以我使用Ionic 5
创建了一个新项目。 并将我以前的所有工作转移到新的Ionic 5
。 我按照以下步骤将Angular Universal
添加到我的项目中。 首先,创建一个应用程序并使用这些命令将其更新到最新版本的 Angular。
ionic start myApp blank --type angular
cd myApp
ng update @angular/core @angular/cli
npm install @angular/animations
然后使用此命令为Angular Universal
添加Express engine
。
ng add @nguniversal/express-engine
然后你需要使用这个命令安装@ionic/angular-server
模块。
npm install @ionic/angular-server@dev
为了在本地主机中进行测试,您的服务器端渲染工作正常,您需要使用此命令。
npm run dev:ssr
有关如何为服务器端渲染设置 Angular Universal 的更多详细信息,您可以查看ionic blog
链接SSR with Angular Universal And Ionic 。
设置后,angular Universal 需要添加title
、 add
或update
meta tag
。 您可以按照我下面给出的示例代码进行操作:
import { Component, OnInit} from '@angular/core';
import { Title, Meta } from '@angular/platform-browser';
@Component({
selector: 'app-sample',
templateUrl: './sample.page.html',
styleUrls: ['./sample.page.scss'],
})
export class SamplePage implements OnInit {
constructor(private titleService: Title, private meta: Meta) { }
ngOnInit() {
this.titleService.setTitle("Your Title");
this.meta.updateTag({ property: 'og:url', content:'http://yoururl.com'});
this.meta.updateTag({ property: 'og:title', content:"Your Title" });
this.meta.updateTag({ property: 'og:image', content: "your image link"});
this.meta.updateTag({ property: 'og:description', content: "description"});
}
}
现在您的社交分享将完美运行。 因为当它不爬行时,它会获取带有数据的元标记。 您需要根据要添加的社交分享更新元标记。
可以使用 ionic 的预构建钩子在构建后修改 index.html。 在ionic.config.json
文件中添加钩子
{
"name": "xxxx",
"integrations": {
"capacitor": {}
},
"type": "vue",
"id": "xxxxx",
"hooks": {
"build:after": "./deploy/after-build.js"
}
}
然后在您的项目文件夹(顶级)中使用文件after-build.js
创建文件夹deploy
, after-build.js
包含以下内容:
var fs = require('fs')
module.exports = (ctx) => {
const index = `${ctx.project.dir}/dist/index.html`;
fs.readFile(index , 'utf8', (err, html) => {
const meta = '<meta name="NEW-META" />';
html = html.replace(/<meta name="OLD-META".*?">/, meta);
fs.writeFile(index, html, 'utf8', err => err && console.log( err ));
});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.