Embed an external webpage in an Angular 2 component

I recently started learning Angular 2 and I'm curious if it's feasible to develop a component that, upon loading, can showcase an external webpage such as Google Calendar or any other site.

Does anyone know if this is achievable? If so, what steps should I take? I've searched online but haven't come across any solutions. I attempted using an iFrame, however, it failed to display anything as a result of the message "Refused to display in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'."

Answer №1

While this question may be old, the solution provided could still benefit many individuals.

To achieve this functionality in your Angular component:

export class AppComponent implements OnInit {
  externalPage: any;
  constructor(private http: HttpClient, private sanitizer: DomSanitizer) {}
  ngOnInit() {
    this.http
      .get('https://google.com/', { responseType: 'text' })
      .subscribe((res) => {
        this.externalPage = this.sanitizer.bypassSecurityTrustHtml(res);
      });
  }
}

In your HTML code:

<div [innerHtml]="externalPage"></div>

However, for this to function correctly, the external site must have CORS enabled:

access-control-allow-methods: GET, OPTIONS, POST, PUT
access-control-allow-origin: *

If not, you may encounter the following error message:

Access to fetch at 'https://google.com/' from origin 'https://display-external-html-into-angular-vqyiga.stackblitz.io' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Directive for multi-field validation in Angular 4 Template-Forms with ngModelGroup

Can someone assist me in validating the match between a user's new password and confirm password using an Angular Directive? Despite correctly identifying a mis-match, the error message is not displayed: Template Form <form> <md-input- ...

Troubleshooting: The issue of ngModel being undefined in Angular2 with the <input> element

I am currently working with Angular2 and a modified version of Semantic-UI that includes a calendar module. I am utilizing the `calendar` and `dropdown` functionalities: constructor() { setTimeout(() => { jQuery('.ui.dropdown').dr ...

Change the value of the checked property to modify the checked status

This is a miniCalculator project. In this mini calculator, I am trying to calculate the operation when the "calculate" button is pressed. However, in order for the calculations to run correctly in the operations.component.ts file, I need to toggle the val ...

Updating the displayed data of an angular2-highcharts chart

I am facing an issue with rendering an empty chart initially and then updating it with data. The charts are rendered when the component is initialized and added through a list of chart options. Although the empty chart is successfully rendered, I am strugg ...

Struggling with TypeScript compilation in a Vue.js project? Encounter error code TS2352

Here is my code snippet from window.ts import Vue from 'vue' interface BrowserWindow extends Window { app: Vue } const browserWindow = window as BrowserWindow export default browserWindow Encountering a compilation error Error message: TS2 ...

The Threejs Raycaster detects collisions with objects even when the ray is just grazing the surface

Within my Vue component, I have integrated a threejs scene and I am facing an issue with selecting objects using the mouse. I am currently using the OnPointerDown event and raycaster to locate objects under the mouse pointer. However, it seems like the ray ...

Error in AngularJs: Unable to assign value to 'showGreeting' property because it is null

Currently, I am utilizing yeoman angularjs-fullstack for project generation. Now, my task is to customize it according to my preferences. I have limited experience with AngularJS and TypeScript, so any feedback would be greatly appreciated, not just the so ...

What is the best way to obtain the dimensions of an image in Angular 2 (or newer) before uploading it to the server, and can this be accomplished without utilizing jQuery?

After searching through multiple resources, I realized that most of the solutions are written in jQuery. However, I am specifically looking for a solution in Typescript. The HTML code snippet is as follows: <input #coverFilesInput class="file-input" t ...

Unique loading animations are assigned to each individual page within the Next.js framework

Is there a way to have unique loading animations for each of my website pages during the loading process? How can I achieve this? I've attempted to put the loading component on the page component directly, but it doesn't seem to work: //Page com ...

The function waitForAngularEnabled does not exist

Currently, I am conducting end-to-end tests for an Angular application. For the login process, it needs to exit the app, so here is what I am doing: browser.waitForAngularEnabled(false); //login browser.waitForAngularEnabled(true); While this approac ...

When switching tabs, Ion-select should not reload the selected name

Whenever I switch tabs and then return to the previous tab in Ionic, the select field that was previously set becomes null, even though the page is still loading and the variable is populated. <ion-header color="primary"> <ion-navbar> &l ...

Can the Angular sentence-case pipe also disrupt already existing camel cases?

I have two different phrases: 1) "please take care of your task" 2) "please think about Philip's idea" When I display them using a pipe that converts text to sentence case, it works well for the first phrase but not for the second one. Here is the ...

Angular - Render distinct options in dropdown depending on criteria

In the HTML code, I have a condition to display the value of data as a dropdown. Now, I want to introduce another condition where when a different dropdown menu with company names is changed (e.g. changing it to 'Amazon'), only the corresponding ...

Angular's Reactive forms: The power of bidirectional binding

Struggling with Reactive forms? I've encountered an issue where updating the model class when a User changes the input is easy, but what about programmatically changing the model and reflecting those changes in the HTML form? In simplified terms: th ...

Using TypeScript and Node.js with Express; I encountered an issue where it was not possible to set a class property of a controller using

I have a Node application using Express that incorporates TypeScript with Babel. Recently, I attempted to create a UserController which includes a private property called _user: User and initialize it within the class constructor. However, every time I ru ...

What is the process for importing a map from an external JSON file?

I have a JSON file with the following configuration data: { "config1": { //this is like a map "a": [ "string1", "string2"], "b": [ "string1", "string2"] } } Previously, before transitioning to TypeScript, the code below worked: import ...

Creating fixtures with Playwright is a simple process that can greatly enhance

I have a requirement to set up fixtures where the first fixture is always available (acting as a base class) and the second fixture will vary in different test files (like a derived class). I've implemented the following code which seems to be working ...

refresh the React component without having to refresh the entire webpage

Hey there, I have a component with a function called "handleAvatarUpload". Currently, when there is a change, the entire page reloads instead of just the component. Is there a way to reload only the component without refreshing the whole page? import { us ...

What are the steps for implementing Angular 2 file upload in ES5?

Struggling to implement angular 2 file upload with ES5 instead of TypeScript. Any advice on how to approach this? I've been working with the ng2-file-upload library available at: https://github.com/valor-software/ng2-file-upload Despite the document ...

Instead of showing the data in the variable "ionic", there is a display of "[object object]"

Here is the code snippet I'm working with: this.facebook.login(['email', 'public_profile']).then((response: FacebookLoginResponse) => { this.facebook.api('me?fields=id,name,email,first_name,picture.width(720).height( ...