Mobilebone.evalScript

是否执行Ajax请求的HTML字符串中的内联script脚本。此为全局设置,影响整个页面。默认为false.

值类型

布尔值。设置为truefalse.

使用

Mobilebone.evalScript = true;

效果

Ajax请求的HTML字符串中内联的script脚本会执行。

其他说明

  1. 只会执行内联JS脚本,src外链JS忽略。如下面会执行:
    <script>console.log("script excuted!");</script>

    但是下面这个1.js会忽略:

    <script src="1.js"></script>

    如果你需要外链JS执行,可以使用内联JS做处理,例如:

    var script = document.createElement("script");
    script.src = "a.js";
    document.body.appendChild(script);
  2. 关于脚本执行的时机。内联JavaScript在页面即将载入的一瞬间就会进行。注意,此时可能存在两个结构和ID均一致的页面,例如,从分页1页面切换到分页2页面,此时,例如,给某元素绑定事件,例如:
    document.getElementById("test").addEventListener("click", function() {
        console.log("clicked!");	
    });	

    则,绑定的事件可能在之前一个元素上。然后造成新页面元素没事件,之前页面元素重复绑定。

    避免此问题方法很多(测试页面/test/ajax-html/index.html均有示意):

    1. 加一个延迟,例如350毫秒。
    2. 使用Mobilebone内置回调方法,例如animationend, 或者onpagefirstinto的参数限制(如下):
      var fun_firstinto = function(pagein) {
          pagein.querySelector("#test").addEventListener("click", function() {
              console.log("clicked!");	
          });
      }

      这样,事件就准确绑定在对应页面元素上了!

    3. 或者使用动态id,如:
      id="test<?php echo $_GET['id']; ?>
                              
      document.getElementById("test<?php echo $_GET['id']; ?>")