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
