javascript - לא להשתמש במאפיין הבסיס בעת ביצוע קריאות API של DomSanitizer?


אני מתקשר באמצעות DomSanitizer כך:

        this.domSanitizer.bypassSecurityTrustResourceUrl(url));

ה-url הוא כתובת URL מלאה לתמונת ה-SVG שמושכת.

הנה דוגמה:

      this.matIconRegistry.addSvgIcon(
        "fs",
        this.domSanitizer.bypassSecurityTrustResourceUrl('https://github.com/fireflysemantics/images/blob/master/fsalpha/logo/fsalpha-logo-optimized.svg'));

עם זאת, מכיוון ש־base מוגדר לכתובת URL אחרת ב־index.html, כתובת ה־URL של מנקה ה‑DOM מקבלת את התחילית שלו.

האם יש דרך לכבות את זה?

זו מאמר שכתבתי שמראה איך זה עובד בלי התכונה base שנוספה:

https://medium.com/@ole.ersoy/angular-material-icon-from-github-hosted-svg-logo-d5c35b923d

וזוהי stackblitz שמראה שכאשר התכונה base מתווספת, הקריאה לכתובת ה-URL המוחלטת מקבלת את הפריפיקס של התכונה base, כך שהכתובת ה-URL שנשלחת נהיית שבורה:

https://stackblitz.com/edit/angular-material-custom-icon-with-base?file=src/index.html

בקשת תכונה

ל-Angular יש בקשת תכונה בנוגע לבעיה זו:

https://github.com/angular/angular/issues/23139

בעיה באנגרול

https://github.com/angular/angular/issues/34645

צילום מסך של באג

זוהי צילום מסך של עקבות הערימה המראה שהכתובת הבסיסית מוקדמת לפני כתובת התמונה:

תשובה #1

זה נראה כמו תקלה. אין שום סיבה אפשרית שה-HttpClient ישנה URL שיש לו פרוטוקול.

רישום אייקון Material אינו משנה שום אחד מה-URL של האייקונים. זה למעשה לא עושה שום דבר מיוחד עם ה-URL, ופשוט מעביר את הטעינה ל-HttpClient.

https://github.com/angular/components/blob/09dc4594259cf1d6b34a5a0893c0bccaa132c319/src/material/icon/icon-registry.ts#L595

לא הצלחתי לשחזר את זה, כי זה ידרוש פריסת אפליקציה לדומיין כמו gh pages, אבל אם אתה רואה שזה קורה אז בבקשה פתח בעיה בפרויקט Angular ב-GitHub ותעדכן אותם.

התשובה היחידה שאני יכול לתת לך היא לכתוב מתפלא מותאם אישית כדי לתקן את כתובת ה-URL.

הנה בלוג שמסביר איך להשתמש במיירט כדי להשתמש בכתובת בסיס. זה לא מדריך על איך לתקן את הבעיה שלך, אבל זה הדבר הכי קרוב שמצאתי.

http://www.projectcodify.com/angular-set-base-url-dynamically