网站的 javascript 适用于 android、windows、linux 和所有浏览器,但不适用于 mac、ios 在任何浏览器上

Posted

技术标签:

【中文标题】网站的 javascript 适用于 android、windows、linux 和所有浏览器,但不适用于 mac、ios 在任何浏览器上【英文标题】:javascript of a site works on android, windows, linux and on all browsers but not in mac, ios on any browser 【发布时间】:2020-07-13 21:40:31 【问题描述】:

我在一个站点上使用了一些非常基本的 java 脚本,它可以在除苹果之外的所有设备上完美运行。我试过了

setting headers and status code from my flask server
disabling jquery
using ' instead of "
disabling all css 

我不知道为什么它不起作用。我没有 mac,我在 iphone 上测试过,我尝试使用 browserstack,但由于某种原因,它根本没有启动任何机器。

我希望我可以分享代码,但它似乎是多余的。

我在这里错过了什么?

我会在这里添加css html和js!

HTML

<!DOCTYPE html>
<html lang='en'>

<head>
  <!-- Required meta tags-->
  <meta charset='UTF-8' />
  <meta name='viewport' content='width=device-width, initial-scale=1' />
<meta http-equiv='Content-Type' content='text/html' />

  <!-- Title Page-->
  <title>CITS AA</title>

  <!-- Icons font CSS-->
  <link href=' url_for('static',filename='vendor/mdi-font/css/material-design-iconic-font.min.css') '
    rel='stylesheet' media='all' />
  <link href=' url_for('static',filename='vendor/font-awesome-4.7/css/font-awesome.min.css') ' rel='stylesheet'
    media='all' />
  <!-- Font special for pages-->
  <link href='https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,500,500i,700,700i,900,900i'
    rel='stylesheet' />

  <!-- Vendor CSS-->
  <link href=' url_for('static',filename='vendor/select2/select2.min.css') ' rel='stylesheet' media='all' />
  <link href=' url_for('static',filename='vendor/datepicker/daterangepicker.css') ' rel='stylesheet' media='all' />

  <!-- Main CSS-->
  <link href=' url_for('static',filename='css/main.css') ' rel='stylesheet' media='all' />
</head>

<body>
  <div class='page-wrapper bg-blue p-t-100 p-b-100 font-robo'>
    <div class='wrapper wrapper--w680'>
      <div class='card card-1'>
        <div class='card-heading'></div>
        <div class='card-body'>
          <h2 class='title'>CITS Attendance Automated</h2>
     
            <div class='input-group'>
              <input  class='input--style-1' type='text' placeholder='NAME' name='name'
                value=' user ' disabled />
            </div>
            <div class='row row-space'>
              <div class='col-2'>
                <div class='col-4'>Select Your Course</div>
                <div class='input-group'>
                  <div class='rs-select2 js-select-simple select--no-search'>
                    <select name='courses' id='courses' value='' onchange='validate()'>
                      % for course in courses %
                      <option
                        value=' '---'.format(course['registrationSemester'],course['registrationYear'],course['cCourseId'],course['section']) '>
                         '---'.format(course['registrationSemester'],course['registrationYear'],course['cCourseId'],course['section']) 
                      </option>
                      % endfor %
                    </select>
                    <div class='select-dropdown'></div>
                  </div>
           
                </div>
              </div>
            </div>
              <div class='row row-space'>
              <div class='col-4 error' id='courses-error'></div>
            </div>
            <div class='row row-space'>
              <div class='col-2'>
                <div class='col-2'>Class Code</div>
                <div class='input-group'>
                  <input  id='classcode' class='input--style-1 input' type='text'
                    placeholder='classcode' name='classcode' disabled />
                </div>
              </div>
              <div class='col-2'>
                <div class='col-2'>Section</div>
                <div class='input-group'>
                  <input id='section' class='input--style-1 input' type='number' placeholder='section' name='section'
                     disabled value='' />
                </div>
              </div>
            </div>
            <div class='row row-space'>
              <div class='col-2'>
                <div class='col-2'>Date</div>

                <div class='input-group'>
                  <input  class='input--style-1 js-datepicker' type='text' placeholder=''
                    name='date' value=' date ' id='date' disabled />
                </div>
              </div>
              <div class='col-2'>
                <div class='col-2'>Semester</div>
                <div class='input-group'>
                  <input id='semester' class='input--style-1 input' type='text' placeholder='semester' name='semester'
                    disabled />
                </div>
              </div>
            </div>
            <div class='row-space'>
              <div class='input-group'>
                <div class='col-4'>
                  Meeting URL
                </div>
                <input class='input--style-1 input' type='text' name='meeturl' id='meeturl' oninput='validate()' />
              </div>
            </div>
            <div class='row row-space'>
              <div class='col-4 error' id='meeturl-error'></div>
            </div>
            <div class='row row-space'>
              <div class='input-group'>
                <div class='col-4'>Meet Code</div>
                <input class='input--style-1 input' type='text' placeholder='code' name='meetcode' id='meetcode'
                  disabled />
              </div>
            </div>
            <div class='row row-space'>
              <div class='p-t-20'>
                <button class='btn btn--radius btn--red' id='submit' onclick='submitData()' disabled>
                  Submit
                </button><span id='messages' style='padding-left: 5px;'>Click Submit to Confirm</span>

              </div>
            </div>
        </div>
      </div>
    </div>
  </div>
  <script defer src=' url_for('static',filename='vendor/jquery/jquery.min.js') '></script>
  <script defer src=' url_for('static',filename='vendor/select2/select2.min.js') '></script>
  <script defer src=' url_for('static',filename='vendor/datepicker/moment.min.js') '></script>
  <script defer src=' url_for('static',filename='vendor/datepicker/daterangepicker.js') '></script>
  <script defer src=' url_for('static',filename='js/global.js') '></script>
</body>
</html>

CSS

.font-robo 
  font-family: 'Roboto', 'Arial', 'Helvetica Neue', sans-serif;


.row 
  display: -webkit-box;
  display: -webkit-flex;
  display: -moz-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;


.row-space 
  -webkit-box-pack: justify;
  -webkit-justify-content: space-between;
  -moz-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;


.col-2 
  width: -webkit-calc((100% - 60px) / 2);
  width: -moz-calc((100% - 60px) / 2);
  width: calc((100% - 60px) / 2);


@media (max-width: 767px) 
  .col-2 
    width: 100%;
  


html 
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;


* 
  padding: 0;
  margin: 0;


*,
*:before,
*:after 
  -webkit-box-sizing: inherit;
  -moz-box-sizing: inherit;
  box-sizing: inherit;


body,
h1,
h2,
h3,
h4,
h5,
h6,
blockquote,
p,
pre,
dl,
dd,
ol,
ul,
figure,
hr,
fieldset,
legend 
  margin: 0;
  padding: 0;


li > ol,
li > ul 
  margin-bottom: 0;


table 
  border-collapse: collapse;
  border-spacing: 0;


fieldset 
  min-width: 0;
  /* [1] */
  border: 0;


button 
  outline: none;
  background: none;
  border: none;


.page-wrapper 
  min-height: 100vh;


body 
  font-family: 'Roboto', 'Arial', 'Helvetica Neue', sans-serif;
  font-weight: 400;
  font-size: 14px;


h1,
h2,
h3,
h4,
h5,
h6 
  font-weight: 400;


h1 
  font-size: 36px;


h2 
  font-size: 30px;


h3 
  font-size: 24px;


h4 
  font-size: 18px;


h5 
  font-size: 15px;


h6 
  font-size: 13px;


.bg-blue 
  background: #2c6ed5;


.p-t-100 
  padding-top: 100px;


.p-t-20 
  padding-top: 20px;


.p-b-100 
  padding-bottom: 100px;


.wrapper 
  margin: 0 auto;


.wrapper--w680 
  max-width: 680px;


.btn 
  line-height: 40px;
  display: inline-block;
  padding: 0 25px;
  cursor: pointer;
  font-family: 'Roboto', 'Arial', 'Helvetica Neue', sans-serif;
  color: #fff;
  -webkit-transition: all 0.4s ease;
  -o-transition: all 0.4s ease;
  -moz-transition: all 0.4s ease;
  transition: all 0.4s ease;
  font-size: 14px;
  font-weight: 700;


.btn--radius 
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;


.btn--green 
  background: #57b846;

.btn--red 
  background: crimson;

.btn--yellow 
  background: gold;


.btn--green:hover 
  background: #4dae3c;


td.active 
  background-color: #2c6ed5;


input[type='date' i] 
  padding: 14px;


.table-condensed td,
.table-condensed th 
  font-size: 14px;
  font-family: 'Roboto', 'Arial', 'Helvetica Neue', sans-serif;
  font-weight: 400;


.daterangepicker td 
  width: 40px;
  height: 30px;


.daterangepicker 
  border: none;
  -webkit-box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15);
  -moz-box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15);
  box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15);
  display: none;
  border: 1px solid #e0e0e0;
  margin-top: 5px;


.daterangepicker::after,
.daterangepicker::before 
  display: none;


.daterangepicker thead tr th 
  padding: 10px 0;


.daterangepicker .table-condensed th select 
  border: 1px solid #ccc;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;
  font-size: 14px;
  padding: 5px;
  outline: none;


input 
  outline: none;
  margin: 0;
  border: none;
  -webkit-box-shadow: none;
  -moz-box-shadow: none;
  box-shadow: none;
  width: 100%;
  font-size: 14px;
  font-family: inherit;


.input-group 
  position: relative;
  margin-bottom: 30px;
  border-bottom: 2px solid #ccc;


.input-icon 
  position: absolute;
  font-size: 18px;
  color: #ccc;
  right: 8px;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -moz-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  -o-transform: translateY(-50%);
  transform: translateY(-50%);
  cursor: pointer;


.input--style-1 
  padding: 9px 0;
  color: #000;

.error 
  color: crimson;


.input--style-1::-webkit-input-placeholder 
  /* WebKit, Blink, Edge */
  color: #555;


.input--style-1:-moz-placeholder 
  /* Mozilla Firefox 4 to 18 */
  color: #555;
  opacity: 1;


.input--style-1::-moz-placeholder 
  /* Mozilla Firefox 19+ */
  color: #555;
  opacity: 1;


.input--style-1:-ms-input-placeholder 
  /* Internet Explorer 10-11 */
  color: #555;


.input--style-1:-ms-input-placeholder 
  /* Microsoft Edge */
  color: #555;


/* ==========================================================================
   #SELECT2
   ========================================================================== */
.select--no-search .select2-search 
  display: none !important;


.rs-select2 .select2-container 
  width: 100% !important;
  outline: none;


.rs-select2 .select2-container .select2-selection--single 
  outline: none;
  border: none;
  height: 34px;


.rs-select2
  .select2-container
  .select2-selection--single
  .select2-selection__rendered 
  line-height: 34px;
  padding-left: 0;
  color: #000;


.rs-select2
  .select2-container
  .select2-selection--single
  .select2-selection__arrow 
  height: 32px;
  right: 4px;
  display: -webkit-box;
  display: -webkit-flex;
  display: -moz-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
  -webkit-justify-content: center;
  -moz-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-box-align: center;
  -webkit-align-items: center;
  -moz-box-align: center;
  -ms-flex-align: center;
  align-items: center;


.rs-select2
  .select2-container
  .select2-selection--single
  .select2-selection__arrow
  b 
  display: none;


.rs-select2
  .select2-container
  .select2-selection--single
  .select2-selection__arrow:after 
  font-family: 'Material-Design-Iconic-Font';
  content: '\f2f9';
  font-size: 18px;
  color: #ccc;
  -webkit-transition: all 0.4s ease;
  -o-transition: all 0.4s ease;
  -moz-transition: all 0.4s ease;
  transition: all 0.4s ease;


.rs-select2
  .select2-container.select2-container--open
  .select2-selection--single
  .select2-selection__arrow::after 
  -webkit-transform: rotate(-180deg);
  -moz-transform: rotate(-180deg);
  -ms-transform: rotate(-180deg);
  -o-transform: rotate(-180deg);
  transform: rotate(-180deg);


.select2-container--open .select2-dropdown--below 
  border: none;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;
  -webkit-box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15);
  -moz-box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15);
  box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15);
  border: 1px solid #e0e0e0;
  margin-top: 5px;
  overflow: hidden;


/* ==========================================================================
   #TITLE
   ========================================================================== */
.title 
  margin-bottom: 37px;


/* ==========================================================================
   #CARD
   ========================================================================== */
.card 
  overflow: hidden;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;
  background: #fff;


.card-1 
  -webkit-box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15);
  -moz-box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15);
  box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15);


.card-1 .card-heading 
  background: url('../iub.jpg') center center/cover no-repeat;
  padding-top: 210px;


.card-1 .card-body 
  padding: 0 90px;
  padding-top: 20px;
  padding-bottom: 20px;


@media (max-width: 767px) 
  .card-1 .card-body 
    padding: 0 40px;
    padding-top: 40px;
    padding-bottom: 40px;
  

JS

(function ($) 
  /*==================================================================
        [ Daterangepicker ]*/
  try 
    $('.js-datepicker').daterangepicker(
      singleDatePicker: true,
      showDropdowns: true,
      autoUpdateInput: false,

      locale: 
        format: 'DD/MM/YYYY',
      ,
    );

    var myCalendar = $('.js-datepicker');
    var isClick = 0;

    $(window).on('click', function () 
      isClick = 0;
    );

    $(myCalendar).on('apply.daterangepicker', function (ev, picker) 
      isClick = 0;
      $(this).val(picker.startDate.format('DD-MM-YYYY'));
    );

    $('.js-btn-calendar').on('click', function (e) 
      e.stopPropagation();

      if (isClick === 1) isClick = 0;
      else if (isClick === 0) isClick = 1;

      if (isClick === 1) 
        myCalendar.focus();
      
    );

    $(myCalendar).on('click', function (e) 
      e.stopPropagation();
      isClick = 1;
    );

    $('.daterangepicker').on('click', function (e) 
      e.stopPropagation();
    );
   catch (er) 
    console.log(er);
  
  /*[ Select 2 Config ]
        ===========================================================*/

  try 
    var selectSimple = $('.js-select-simple');

    selectSimple.each(function () 
      var that = $(this);
      var selectBox = that.find('select');
      var selectDropdown = that.find('.select-dropdown');
      selectBox.select2(
        dropdownParent: selectDropdown,
      );
    );
   catch (err) 
    console.log(err);
  
)(jQuery);

function validate() 
  let error = 0;

  let courses = document.getElementById('courses');
  let meeturl = document.getElementById('meeturl');

  if (courses.value && courses.value != '') 
    let [semester, year, classcode, section] = document
      .getElementById('courses')
      .value.toString()
      .split('-');
    document.getElementById('classcode').style = 'font-weight: bold';
    document.getElementById('section').style = 'font-weight: bold';
    document.getElementById('semester').style = 'font-weight: bold';
    document.getElementById('classcode').value = classcode;
    document.getElementById('section').value = section;
    document.getElementById('semester').value = semester;
    document.getElementById('courses-error').innerText = '';
   else 
    error++;
    document.getElementById('courses-error').innerText =
      'Please select a course';
  

  if (meeturl.value && meeturl.value != '') 
    let parsed = meeturl.value
      .toString()
      .match(
        /(?<=https:\/\/meet.google.com\/)[a-z0-9]3-[a-z0-9]4-[a-z0-9]3?/gi
      );
    if (parsed && parsed.length > 0) 
      let meetcode = parsed[0].toString().replace(/-/g, '').toUpperCase();
      if (meetcode && meetcode.length == 10) 
        document.getElementById('meetcode').value = meetcode;
        document.getElementById('meetcode').style = 'font-weight: bold';
        document.getElementById('meeturl-error').innerText = '';
       else 
        document.getElementById('meeturl-error').innerText = 'Incorrect URL';
        document.getElementById('meetcode').value = '';
        error++;
      
     else 
      document.getElementById('meeturl-error').innerText =
        'Incorrect/Empty URL';
      document.getElementById('meetcode').value = '';
      error++;
    
   else 
    document.getElementById('meeturl-error').innerText = 'Empty URL';
    document.getElementById('meetcode').value = '';
    error++;
  

  if (error != 0) 
    document.getElementById('submit').disabled = true;
    document.getElementById('submit').classList.remove('btn--green');
    document.getElementById('submit').classList.add('btn--red');
   else 
    document.getElementById('submit').disabled = false;
    document.getElementById('submit').classList.remove('btn--red');
    document.getElementById('submit').classList.add('btn--green');
  

function submitData() 
  if (
    document.getElementById('meetcode').value &&
    document.getElementById('meeturl').value &&
    document.getElementById('classcode').value &&
    document.getElementById('section').value &&
    document.getElementById('date').value &&
    document.getElementById('semester').value
  ) 
    send = 
      meetcode: document.getElementById('meetcode').value,
      meeturl: document.getElementById('meeturl').value,
      classcode: document.getElementById('classcode').value,
      section: document.getElementById('section').value,
      date: document.getElementById('date').value,
      semester: document.getElementById('semester').value,
    ;
    document.getElementById('submit').classList.remove('btn--green');
    document.getElementById('submit').classList.add('btn--yellow');
    document.getElementById('submit').disabled = true;
    fetch('', 
      method: 'POST',
      headers:  'Content-Type': 'application/json' ,
      body: JSON.stringify(send),
    ).then(async function (response) 
      let data = await response.json();
      if (data.valid) 
        document.getElementById('messages').innerText = 'Done, enjoy teaching';
        document.getElementById('messages').style = 'color: green;';
        Array.from(document.getElementsByClassName('input')).forEach(function (
          item
        ) 
          item.value = '';
        );
        document.getElementById('submit').classList.remove('btn--yellow');
        document.getElementById('submit').classList.add('btn--green');
        document.getElementById('submit').disabled = false;
       else 
        document.getElementById('messages').innerText =
          'Something went wrong, reload and try again';
        document.getElementById('messages').style = 'color: red;';
      
    );
   else 
    document.getElementById('messages').innerText =
      'Please fill the form properly';
    document.getElementById('messages').style = 'color: red;';
  

validate();

【问题讨论】:

我们不知道。也许您应该显示不起作用的代码。 我不知道我错过了什么。我可以添加什么来帮助解决这个问题吗? 我们不知道代码是什么或错误是什么。您的代码就像告诉机械师您的汽车不会在星期一启动,也不让他们看到汽车。 尝试在控制台选项卡中查看浏览器的开发者工具 我在 LINUX 和 Windows 上做过,但我没有看到任何问题。没有mac看mac的控制台。 【参考方案1】:

实际原因与一组特定的正则表达式有关。到目前为止,Look ahead 还不能在任何苹果设备上工作,因此从苹果设备运行代码时会失败。我通过使用不同的正则表达式模式解决了它。

【讨论】:

以上是关于网站的 javascript 适用于 android、windows、linux 和所有浏览器,但不适用于 mac、ios 在任何浏览器上的主要内容,如果未能解决你的问题,请参考以下文章

适用于网站的 AWS 服务

jQuery 适用于本地主机,但不适用于网站

JavaScript 时钟适用于 Chrome,但不适用于 Firefox 或 IE

HTTP POST 请求适用于 Postman,但不适用于我的 Web 应用程序的 JavaScript 提取 [关闭]

适用于Chrome或Firefox的Kiosk模式

网站建设静态页面没有数据库查询的适用