diff --git a/jquery.modal.js b/jquery.modal.js
index 02c522d..9add4fd 100644
--- a/jquery.modal.js
+++ b/jquery.modal.js
@@ -1,6 +1,6 @@
 /*
     A simple jQuery modal (http://github.com/kylefox/jquery-modal)
-    Version 0.9.1
+    Version 0.9.2
 */
 
 (function (factory) {
@@ -115,7 +115,15 @@
     block: function() {
       this.$elm.trigger($.modal.BEFORE_BLOCK, [this._ctx()]);
       this.$body.css('overflow','hidden');
-      this.$blocker = $('<div class="' + this.options.blockerClass + ' blocker current"></div>').appendTo(this.$body);
+      if (window.trustedTypes && window.trustedTypes.createPolicy) {
+        const policy = self.trustedTypes.createPolicy('jquery-modal-fix-1', {
+          createHTML: function(_ignored) { return this.$body }
+        });
+        safeBody = policy.createHTML('_ignored');
+      } else {
+        safeBody = this.$body;
+      }
+      this.$blocker = $('<div></div>').addClass(this.options.blockerClass + ' blocker current').appendTo(safeBody);
       selectCurrent();
       if(this.options.doFade) {
         this.$blocker.css('opacity',0).animate({opacity: 1}, this.options.fadeDuration);
@@ -169,8 +177,16 @@
 
     showSpinner: function() {
       if (!this.options.showSpinner) return;
-      this.spinner = this.spinner || $('<div class="' + this.options.modalClass + '-spinner"></div>')
-        .append(this.options.spinnerHtml);
+      if (window.trustedTypes && window.trustedTypes.createPolicy) {
+        const policy = self.trustedTypes.createPolicy('jquery-modal-fix-2', {
+          createHTML: function(_ignored) { return this.options.spinnerHtml }
+        });
+        safeSpinnerHtml = policy.createHTML('_ignored');
+      } else {
+        safeSpinnerHtml = this.options.spinnerHtml;
+      }
+      this.spinner = this.spinner || $('<div></div>').addClass(this.options.modalClass + '-spinner')
+        .append(safeSpinnerHtml);
       this.$body.append(this.spinner);
       this.spinner.show();
     },
@@ -181,7 +197,7 @@
 
     //Return context for custom events
     _ctx: function() {
-      return { elm: this.$elm, $elm: this.$elm, $blocker: this.$blocker, options: this.options };
+      return { elm: this.$elm, $elm: this.$elm, $blocker: this.$blocker, options: this.options, $anchor: this.anchor };
     }
   };
 
