HowTo XF2.X.X XenForo 2 - Versionen identifizieren (1 Betrachter)

  • Ersteller des Themas
  • Admin
  • #1

Skull³

Community-Team
Teamleitung
Black-Market: 0 / 0 / 0
4 April 2019
7.311
100 %
Wie kann ich die Version einer XenForo 2 Installation feststellen ?

Hierzu habe ich den Versuch unternommen, eine kleine Liste mit einigen Unterschieden zu erzeugen (XenForo2). Meist muss man dazu die JavaScript Dateien anschauen:

  • core-compiled.js
    • Nach folgendem Code suchen
      JavaScript:
      d.fn.toggleClassTransitioned=function(a,b,e,m){"boolean"!==typeof b&&"undefined"===typeof e&&(e=b,b=null);for(var g="boolean"===typeof b,f=this.length,l=0;l<f;l++){var h=d(this[l]);var k=g?b:h.hasClass(a)?!1:!0;c(h,k,a,e,m)}return this}}(),d.extend(XF,{config:{userId:null,enablePush:!1,skipServiceWorkerRegistration:!1,skipPushNotificationCta:!1,pushAppServerKey:null,csrf
      • der darauf folgende Code sieht in dieser Version wie folgt aus
        JavaScript:
        d("html").data("csrf")
        vorher
        JavaScript:
        null
    • Nach folgendem Code suchen
      JavaScript:
      unparseBbCode:function(a){var b=d(h.createElement("div"));b.html(a);b.find(".js-noSelectToQuote").each(function(){d(this).remove()});d.each(["B","I","U"
      • der darauf folgende Code sieht in dieser Version wie folgt aus
        JavaScript:
        ,"S"],function(a,e)
        vorher gab es "S" nicht
    • Nach folgendem Code suchen
      JavaScript:
      a.replace(/<img[^>]+>/ig,function(a){if(a.match(/class="([^"]* )?smilie( |")/)){var b;if(b=a.match(/alt="([^"]+)"/))return b[1]}return a});a=a.replace(/([\w\W]|^)<a\s[^>]*data-user-id="\d+"\s+data-username="([^"]+)"[^>]*>([\w\W]+?)<\/a>/gi,
      • Hier werden nun die Variablen "d" und "f"
        JavaScript:
        function(a,c,d,f)
        verwendet, vorher waren es "e" und "d"
        JavaScript:
        function(a,c,e,d)
    • Nach folgendem Code suchen
      JavaScript:
      this.$target.toggleClass("is-sticky",a)
      • Diesen Code gibt es nicht mehr in dieser Version.

  • core-compiled.js
    • In der Funktion in der ersten Zeile wird die Variable "k"
      JavaScript:
      function(d,k,h)
      verwendet vorher war es "l"
      JavaScript:
      function(d,l,h)
    • Nach folgendem Code suchen
      JavaScript:
      ,XF.LocalStorage.setJson("visitorCounts",{time:c||Math.floor((new Date).getTime()/
      suchen
      • diesen gibt es erst ab dieser Version
    • Nach folgendem Code suchen
      JavaScript:
      XF.Element.register("password-hide-show","XF.PasswordHideShow")
      suchen
      • diesen gibt es erst ab dieser Version

  • core-compiled.js
    • Seit dieser Version keine Header mehr in der Datei
    • Nach folgendem Code suchen
      JavaScript:
      $jscomp.checkStringArgs=function(d,l,h){if(null==d)throw new TypeError
      • diesen gibt es erst ab dieser Version
  • inline_mod.js
    • loadBar:function(onLoad) sieht ab dieser Version wie folgt aus:
      JavaScript:
              loadBar: function(onLoad)
              {
                  var self = this;
      
                  // put this in a timeout to handle JS setting multiple toggles
                  // in a single action, and firing click actions for each one
      
                  if (this.loadTimeout)
                  {
                      clearTimeout(this.loadTimeout);
                  }
      
                  this.loadTimeout = setTimeout(function()
                  {
                      if (self.xhr)
                      {
                          self.xhr.abort();
                      }
                      self.xhr = XF.ajax(
                          'GET', self.options.href,
                          { type: self.options.type },
                          function(result) { self._showBar(result, onLoad); }
                      );
                  }, 10);
              },
      vorher
      JavaScript:
              loadBar: function(onLoad)
              {
                  var self = this;
      
                  if (this.xhr)
                  {
                      this.xhr.abort();
                  }
                  this.xhr = XF.ajax(
                      'GET', this.options.href,
                      { type: this.options.type },
                      function(result) { self._showBar(result, onLoad); }
                  );
              },
  • preamble-compiled.js
    • Diese Datei gibt es nicht mehr ab dieser Version.
  • vendor-compiled.js
    • Seit dieser Version kam die Sektion " * jQuery Mobile Events" hinzu

  • core-compiled.js
    • Hier nach dem folgenden
      JavaScript:
      if(void 0===v)for(v={},y=0;y
      suchen
      • der darauf folgende Code sieht in dieser Version wie folgt aus
        JavaScript:
        u.length
        man beachte hier die Variable "u", in den Versionen davor lautete die Variable "t"
    • Des Weiteren gibt es in der gleichen Datei den Aufruf
      JavaScript:
      NoticeWatcher.initialize()
      welcher vorher nicht vorhanden war
    • Nach der Sektion "XenForo form.min.js" suchen
      • Hier sieht die Funktion wie folgt aus
        JavaScript:
        function(c,f,h)
        Man beachte die Variable "f" in den Version davor lautete die Variable "e"
    • Nach dem folgenden
      JavaScript:
       if(this.supportsSticky){var e=!1,k=parseInt(a.css("top"),10),g=XF.isIOS(),h,l=function(c){var d=
      suchen
      • in dieser Version ist d=Math.floor(a[0][/CODE], davor war es
        JavaScript:
        d=a[0]
  • special_characters.min.js
    • Seit diesem Release ist hier die Version froala_editor v2.9.1 eingebunden, vorher froala_editor v2.8.4

Hier gabe es nur ein Sicherheitsupdate:
  • src/XF/Str/Formatter.php
    • The issue is a XSS vulnerability. XSS (Cross Site Scripting) issues allow scripts and malicious HTML to be injected into the page, potentially allowing data theft or unauthenticated access.
      PHP:
          public function autoLinkStructuredText($string)
          {
              $string = $this->moveHtmlToPlaceholders($string, $restorePlaceholders);
      
              $string = preg_replace_callback(
                  '#(?<=[^[email protected]]|^)(https?://|www\.)[^\s"<>{}`]+#i',
                  function (array $match)
                  {
                      $url = $this->removeHtmlPlaceholders($match[0]);
                      $url = htmlspecialchars_decode($url, ENT_QUOTES);
                      $link = $this->prepareAutoLinkedUrl($url);
      
                      if (!$link['url'])
                      {
                          return htmlspecialchars($url, ENT_QUOTES, 'utf-8');
                      }
      
                      $linkInfo = $this->getLinkClassTarget($link['url']);
                      $classAttr = $linkInfo['class'] ? " class=\"$linkInfo[class]\"" : '';
                      $targetAttr = $linkInfo['target'] ? " target=\"$linkInfo[target]\"" : '';
                      $noFollowAttr = $linkInfo['trusted'] ? '' : ' rel="nofollow"';
      
                      return '<a href="' . htmlspecialchars($link['url'], ENT_QUOTES, 'utf-8')
                          . "\"{$classAttr}{$noFollowAttr}{$targetAttr}>"
                          . htmlspecialchars($link['linkText'], ENT_QUOTES, 'utf-8') . '</a>'
                          . htmlspecialchars($link['suffixText'], ENT_QUOTES, 'utf-8');
                  },
                  $string
              );
      
              $string = $restorePlaceholders($string);
      
              return $string;
          }
      Entscheidend war die Zeile
      PHP:
      return htmlspecialchars($url, ENT_QUOTES, 'utf-8');
      vorher wurde hier nur $url returned.

  • core-compiled.js
    • Nach dem folgenden Code suchen
      JavaScript:
       (console.warn("$.onPassive does not support namespaced events %s.on%s",this.get(0),a),!1):Modernizr.passiveeventlisteners?(this.get(0).addEventListener(a,b
      • Seit dieser Version wird addEventListener mit drei Parametern aufgerufen, der folgenden Parameter kam hinzu:
        JavaScript:
         ,{passive:!0})
    • Nach dem folgenden Code suchen
      JavaScript:
       var f=g?"addClass":"removeClass",h=g?"removeClass":"addClass";g=b(c,l,g?!0:!1);var
      • Seit dieser Version wird hier die Varibale "r" definiert
        JavaScript:
         var r=c[0]
        vorher war es die Variable "q"
    • Nach dem folgenden Code suchen
      JavaScript:
      XF.debug.disableAjaxSubmit))
      , dieser ist erst seit dieser Version vorhanden.
  • vendor.js
    • Nach dem folgenden Code suchen
      JavaScript:
      30,31][b]},A=function(a){m(a)&&a.setHours(0,0,0,0)},F=function(a,b){
      • Seit dieser Version wird hier die Variable "a" und "b" definiert
        JavaScript:
         a=new Date(a.getTime());b=new
        davor war es "d" und "c"
        JavaScript:
        var d=new Date(a.getTime()),c=new
    • Suche die Sektion Autosize, ab diesem Release ist hier die Version 4.0.2 eingebunden
  • special_characters.min.js
    • Seit diesem Release ist hier die Version froala_editor v2.8.4 eingebunden, vorher froala_editor v2.8.1

Hier gabe es nur ein Sicherheitsupdate:
  • src/XF/Template/Templater.php
    • XenForo 2.0.9 fixes a flaw that could potentially be exploited to create a cross-site scripting vulnerability. We recommend that all customers running XenForo 2.0 upgrade to 2.0.9 or use the attached patch file as soon as possible. Note that if you are applying the patch rather than doing a full upgrade to 2.0.9, you will need to apply the 2.0.8 patch too.

      XenForo extends thanks to Thomas Schneider for identifying the issue.

      The issue is a XSS vulnerability. XSS (Cross Site Scripting) issues allow scripts and malicious HTML to be injected into the page, potentially allowing data theft or unauthenticated access.
      PHP:
          public function filterJson($templater, $value, &$escape, $prettyPrint = false)
          {
              if ($prettyPrint)
              {
                  $output = \XF\Util\Json::jsonEncodePretty($value, false);
      
                  // do limited slash escaping to improve readability
                  $output = str_replace('</', '<\\/', $output);
              }
              else
              {
                  $output = json_encode($value);
              }
      
              $output = str_replace('<!', '\u003C!', $output);
      
              return $output;
          }
      Hier wurde "preg_replace" mit "str_replace" ersetzt.

Hier gabe es nur ein Sicherheitsupdate:
  • src/XF/Str/Formatter.php
    • Today, we are releasing XenForo 2.0.8 to address a potential security vulnerability. We recommend that all customers running XenForo 2.0 upgrade to 2.0.8 or use the attached patch file as soon as possible.

      The issue is a XSS vulnerability. XSS (Cross Site Scripting) issues allow scripts and malicious HTML to be injected into the page, potentially allowing data theft or unauthenticated access.

      Specifically, the issue relates to specially crafted text entered into messages and output using the structured text system (used in profile posts and comments).
      PHP:
          public function autoLinkStructuredText($string)
          {
              $string = $this->moveHtmlToPlaceholders($string, $restorePlaceholders);
      
              $string = preg_replace_callback(
                  '#(?<=[^[email protected]]|^)(https?://|www\.)[^\s"<>{}`]+#i',
                  function (array $match)
                  {
                      $url = $this->removeHtmlPlaceholders($match[0]);
                      $url = htmlspecialchars_decode($url, ENT_QUOTES);
                      $link = $this->prepareAutoLinkedUrl($url);
      
                      $linkInfo = $this->getLinkClassTarget($link['url']);
                      $classAttr = $linkInfo['class'] ? " class=\"$linkInfo[class]\"" : '';
                      $targetAttr = $linkInfo['target'] ? " target=\"$linkInfo[target]\"" : '';
                      $noFollowAttr = $linkInfo['trusted'] ? '' : ' rel="nofollow"';
      
                      return '<a href="' . htmlspecialchars($link['url'], ENT_QUOTES, 'utf-8')
                          . "\"{$classAttr}{$noFollowAttr}{$targetAttr}>"
                          . htmlspecialchars($link['linkText'], ENT_QUOTES, 'utf-8') . '</a>'
                          . htmlspecialchars($link['suffixText'], ENT_QUOTES, 'utf-8');
                  },
                  $string
              );
      
              $string = $restorePlaceholders($string);
      
              return $string;
          }
      htmlspecialchars_decode und htmlspecialchars Funktionen eingebunden.

  • notice.js (leider noch nicht herausgefunden, auf welcher Seite diese JavaScript Datei eingebunden wird)
    • hier wurde start: function() geaendert, der Code sieht nun wie folgt aus
      JavaScript:
              start: function()
              {
                  var self = this,
                      $notices = this.$notices,
                      noticeType = this.options.type;
      
                  if (noticeType == 'floating')
                  {
                      $notices.each(function()
                      {
                          var $notice = $(this),
                              displayDuration = $notice.data('display-duration'),
                              delayDuration = $notice.data('delay-duration'),
                              autoDismiss = $notice.data('auto-dismiss');
      
                          if (delayDuration)
                          {
                              setTimeout(function()
                              {
                                  self.displayFloating($notice, XF.config.speed.normal, displayDuration, autoDismiss);
                              }, delayDuration);
                          }
                          else
                          {
                              self.displayFloating($notice, XF.config.speed.fast, displayDuration, autoDismiss);
                          }
                      });
                  }
                  else if (noticeType == 'scrolling' && this.$notices.length > 1)
                  {
                      if ($.fn.lightSlider)
                      {
                          if (!Modernizr.flexbox)
                          {
                              var height = 0;
                              this.$notices.each(function()
                              {
                                  height = Math.max($(this).outerHeight(), height);
                              });
                              this.$notices.css('height', height);
                          }
      
                          this.slider = this.$target.lightSlider({
                              item: 1,
                              addClass: 'noticeScrollContainer',
                              slideMargin: 0,
                              galleryMargin: 0,
                              controls: false,
                              auto: true,
                              pause: this.options.scrollInterval * 1000,
                              speed: Modernizr.flexbox ? 400 : 0, // older IE has some animation issues
                              pauseOnHover: true,
                              loop: true,
                              rtl: XF.isRtl(),
                              enableDrag: false
                          });
      
                          $(window).on('resize', XF.proxy(this, 'refreshSlider'));
                      }
                      else
                      {
                          console.error('Lightslider must be loaded first.');
                      }
                  }
                  else
                  {
                      var $cookieNotice = $notices.closest('.js-notice[data-notice-id="-1"]');
      
                      if ($cookieNotice.length)
                      {
                          var height = $cookieNotice.height();
                          $(document).find('footer').css('margin-bottom', height);
                      }
                  }
              },
      Der
      JavaScript:
                  else
                  {
                      var $cookieNotice = $notices.closest('.js-notice[data-notice-id="-1"]');
      
                      if ($cookieNotice.length)
                      {
                          var height = $cookieNotice.height();
                          $(document).find('footer').css('margin-bottom', height);
                      }
                  }
      kam hinzu.
    • hier wurde start: function() geaendert, der Code sieht nun wie folgt aus
      JavaScript:
              removeNotice: function($notice)
              {
                  var self = this;
      
                  if (this.slider)
                  {
                      var total = this.$notices.length,
                          current = this.slider.getCurrentSlideCount(),
                          removeSlide = function()
                          {
                              $notice.remove();
                              self.updateNoticeList();
                              if (self.handleNoticeListChange())
                              {
                                  self.refreshSlider();
                                  self.slider.goToSlide(current);
                              }
                          };
      
                      if (total > 1)
                      {
                          if (current >= self.slider.getTotalSlideCount())
                          {
                              current = 1;
                          }
                          this.slider.goToNextSlide();
                          setTimeout(removeSlide, 500);
                      }
                      else
                      {
                          removeSlide();
                      }
                  }
                  else
                  {
                      $notice.xfFadeUp(XF.config.speed.fast, function()
                      {
                          if ($notice.data('notice-id') == '-1')
                          {
                              $(document).find('footer').css('margin-bottom', '');
                          }
                          $notice.remove();
                          self.updateNoticeList();
                          self.handleNoticeListChange();
                      });
                  }
              },
      Der
      JavaScript:
                          if ($notice.data('notice-id') == '-1')
                          {
                              $(document).find('footer').css('margin-bottom', '');
                          }
      kam hinzu.
  • A summary of the changes in this release are as follows:

    Ensure the server side validates the privacy policy/terms and rules acceptance form (XF1 and XF2)
    Ensure certain fields output in the data portability exports are escaped (XF1 and XF2)
    Some small phrase adjustments (XF1 and XF2)
    Attempt to ensure the new cookie notice does not hide the footer links (XF1 and XF2)
    Ensure data portability features are only available to admins with the "Manage users" permission (XF1 and XF2)
    If the geoLocationUrl option is empty, no longer attempt to link a user's location (XF1 and XF2)
    If a user's location is linked, ensure that noreferrer and nofollow values are set (XF1 and XF2)
    Implement the ability to add an unsubscribe link to admin sent emails (XF1)
    Fix issues with selecting the new bottom fixer notice type (XF1)
    Fix for invalid CSS (XF1)
    Fix broken register_twitter template (XF1)
    Not GDPR related, but fix issue with toggling Q&A CAPTCHA questions (XF2)
    Use consistent variables for displaying privacy policy and terms and rules URLs on help pages (XF2)
    Ensure default privacy policy and terms and rules help pages are redirected appropriately when custom URLs are set (XF2)
    Do not display protected change log entries (like policy acceptance dates) for potential spammers in the user approval queue (XF2)

  • Es kam Privacy_policy in den Hilfeseiten hinzu
    • PolicyAcceptance kam hinzu
  • A summary of the changes in this release for both XF1 and XF2:

    New notice position "Fixed" which fixes notices to the bottom of the page.
    GDPR: New default privacy policy help page
    GDPR: Ability to mark change log entries as "protected" so they will never be pruned
    GDPR: New fields to log the date and time that the privacy policy / terms and rules were last accepted (logged as protected in the user change log)
    GDPR: Now possible to force all members to accept privacy policy / terms and rules before continuing using the site
    GDPR: More detailed cookie notice which has to be explicitly acknowledged. It will appear in the new "Fixed" notice position.
    GDPR: Updated default Cookie help page text.
    GDPR: When deleting a user, give an option to change their name in order to anonymize content they have created.
    GDPR: Functionality to allow very basic personal details to be exported in XML format on one forum and imported into another to comply with data portability.
    GDPR: Require explict consent when registering and only log acceptance if consent was given.
    GDPR: New option to show "Require site email" option to be filled in during registration (with consent date being logged if appropriate).
    GPDR: Add a new option to anonymise IP addresses for Google Analytics.

  • core-compiled.js
    • Nach dem folgenden Code suchen
      JavaScript:
       var f=g?"addClass":"removeClass",h=g?"removeClass":"addClass";g=b(c,l,g?!0:!1);var
      • Seit dieser Version wird hier die Varibale "q" definiert
        JavaScript:
         var q=c[0]
        vorher war es die Variable "k"
    • Nach dem folgenden Code suchen
      JavaScript:
      null,a.onerror=null,l.appendChild(a),c()}var f=h.scripts[0],g="async"in f;f=f.readyState;var l=h.head,p=0,m=[],
      • Seit dieser Version wird im nachfolgenden Code die Variable "r" verwendet
        JavaScript:
        r;for(r in a)if(a.hasOwnProperty(r))
        , vorher war es die Variable "t"
    • Nach dem folgenden Code suchen
      JavaScript:
      0);d(h).trigger("xf:reinit",[a])},getDefaultFormData:function(a,b,c,e){var f;b&&b.length&&b.attr("name")&&(f=b.attr("name"));c&&"multipart/form-data"===a.attr("enctype")&&console.error("JSON serialized forms do not support the file upload-style enctype.");if(k.FormData&&!c)
      • Seit dieser Version wird im nachfolgenden Code die Variable "g" verwendet
        JavaScript:
        {var g=new FormData
        in den vorherigen Versionen "e"
    • Nach dem folgenden Code suchen
      JavaScript:
      +(b.secure?"; secure":"")+";
      • Diesen Code gibt es erst ab dieser Version
    • Nach dem folgenden Code suchen
      JavaScript:
      this.options.optional||console.error("Could not find the disabler control container");var a=this.$target,b=a.closest("form");if(b.length)b.on("reset",XF.proxy(this,"formReset"));if(a.is(":radio")){var f=b,d=a.attr("name");b.length||(f=c(e.body));f.on("click",'input:radio[name="'+d+'"]',XF.proxy(this,"click"))}else a.click(XF.proxy(this,"click"));a.on("control:enabled control:disabled",XF.proxy(this,"recalculateAfter"));
      • Seit dieser Version wird der folgenden Code verwendet
        JavaScript:
        this.$container.one("editor:init",XF.proxy(this,"recalculateAfter"));
        , vorher war es
        JavaScript:
        this.recalculate(!0)},click:function(a,b){this.recalculateAfter(!1,b&&b.triggered)
  • special_characters.min.js
    • Seit diesem Release ist hier die Version froala_editor v2.8.1 eingebunden, vorher froala_editor v2.7.6

  • Seit dieser Version wird die Groesse vm Avatar nicht mehr auf Hoehe und Breite geprueft, vorher erhielt man ggf. die folgende Meldung:
    • Please provide an image whose longer side is no more than twice the length of its shorter side.

  • core-compiled.js
    • Nach dem folgenden Code suchen
      JavaScript:
      isIE:function(){var a=navigator.userAgent;return 0<a.indexOf("MSIE ")||0<a.indexOf("Trident/")},
      • Diesen Code gibt es erst ab dieser Version
    • Nach dem folgenden Code suchen
      JavaScript:
      {switch(a.which){case 27:XF.MenuWatcher.closeAll();
      • Seit dieser Version wird der folgenden Code verwendet
        JavaScript:
        XF.hideTooltips();
        vorher
        JavaScript:
        XF.hideOverlays();XF.hideTooltips();
    • Nach dem folgenden Code suchen
      JavaScript:
      if(!this.processing){this.processing=!0;a=this.$target.attr("href");var b=this;XF.ajax("POST",a,{},
      • Seit dieser Version wird der folgenden Code verwendet
        JavaScript:
        XF.proxy
        vorher
        JavaScript:
        c.proxy
    • Nach der Sektion * XenForo form.min.js suchen
      • Hier werden nun die Variablen "c" und "e"
        JavaScript:
        function(c,h,e)
        verwendet, vorher waren es "b" und "f"
        JavaScript:
        function(b,h,f)
    • Nach der Sektion * XenForo structure.min.js suchen
      • Hier werden nun die Variablen "f" und "l"
        JavaScript:
        function(d,f,l)
        verwendet, vorher waren es "g" und "k"
        JavaScript:
        function(d,g,k)
    • Nach der Sektion * XenForo tooltip.min.js suchen
      • Hier wird nun die Variablen "d"
        JavaScript:
        function(d,l,e)
        verwendet, vorher war es "c"
        JavaScript:
        function(c,l,e)
  • inline_mod.js
    • Nach dem folgenden Code suchen
      JavaScript:
      this.$target.on('click', this.options.toggle,
      • Seit dieser Version wird der folgenden Code verwendet
        JavaScript:
        XF.proxy(this, 'onToggle'));
        vorher
        JavaScript:
        $.proxy(this, 'onToggle'));

  • core-compiled.js
    • Nach der Sektion * XenForo form.min.js suchen
      • Copyright ist seit dieser Version 2018 vorher 2017
      • Hier werden nun die Variablen "k" und "h"
        JavaScript:
        function(d,k,h)
        verwendet, vorher waren es "l" und "k"
        JavaScript:
        function(d,l,k)
    • Nach der Sektion * XenForo action.min.js suchen
      • Copyright ist seit dieser Version 2018 vorher 2017
    • Nach dem folgenden Code suchen
      JavaScript:
      d("body");if("relative"==a.css("position")){var b=(-1*parseInt(a.css("top"),10)||0)+g.scrollY;a.css({position:"",top:"","margin-bottom":""});d("html").css("overflow","");g.scrollTo(0,b)}this.pauseRepositioning=!1;this.isOpen()&&this.reposition()}},keyboardEvent:function(a)
      • Seit dieser Version wird der folgenden Code verwendet
        JavaScript:
        {if(("ArrowUp"==a.key||"ArrowDown"==a.key)&&XF.Keyboard.isShortcutAllowed(k.activeElement)&&d(k.activeElement).closest(".menu")
        vorher
        JavaScript:
        {if((38==a.which||40==a.which)&&"A"==k.activeElement.tagName)
    • inline_mod.js
      • Nach der Sektion * XenForo inline_mod.js suchen
        • Copyright ist seit dieser Version 2018 vorher 2017
    • preamble.min.js
      • Nach der Sektion * XenForo preamble.min.js suchen
        • Copyright ist seit dieser Version 2018 vorher 2017

  • core-compiled.js
    • Nach dem folgenden Code suchen
      JavaScript:
      e.clientWidth,h:e.offsetHeight-e.clientHeight};c.remove();a||(XF._measureScrollBar=e);return e[b]}return XF._measureScrollBar[b]},windowHeight:function(){return XF.browser.ios||XF.browser.android?l.innerHeight:d(l).height()},pageLoadScrollFix:function(){if(l.location.hash){var a=!1
      • Hier wird seit dieser Version der folgende Code verwendet
        JavaScript:
        b=function(){if(!a){
        vorher
        JavaScript:
        ;setTimeout(function(){d(l).one("scroll",function(b){
    • Nach dem folgenden Code suchen
      JavaScript:
      "xf:action-start":c,ajaxStop:e,"xf:action-stop":e})},show:c,hide:e}}(),XF.DynamicDate=function(){var a,b,c,e,f,g,h,n=!1,m,t=function(){m=setInterval(function(){u(k)},2E4)},
      • Hier wird seit dieser Version der folgende Code verwendet
        JavaScript:
        u=function(k)
        vorher
        JavaScript:
        u=function(l)
    • Nach der Sektion " * XenForo structure.min.js" suchen
      • Nach dem folgenden Code suchen
        JavaScript:
        var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=
        • Hier wird nun die Variablen "g"
          JavaScript:
          function(d,g,k)
          verwendet, vorher war es "f"
          JavaScript:
          function(d,f,k)
 
Zuletzt bearbeitet:

Dieses Thema betrachten gerade (Benutzer: 0, Gäste: 1)