javascript - 从 JS 中的另一个脚本获取函数

标签 javascript scripting

我从书签加载这个 JS 代码:

function in_array(a, b)
{
  for (i in b)
    if (b[i] == a)
      return true;
  return false;
}

function include_dom(script_filename) {
    var html_doc = document.getElementsByTagName('head').item(0);
    var js = document.createElement('script');
    js.setAttribute('language', 'javascript');
    js.setAttribute('type', 'text/javascript');
    js.setAttribute('src', script_filename);
    html_doc.appendChild(js);
    return false;
}

var itemname = '';
var currency = '';
var price    = '';

var supported = new Array('www.amazon.com');
var domain = document.domain;

if (in_array(domain, supported))
{
  include_dom('http://localhost/bklts/parse/'+domain+'.js');
  alert(getName());
}
[...]

请注意,“getName()”函数位于 http://localhost/bklts/parse/www.amazon.com/js 中.此代码仅在我第二次单击小书签时起作用(该功能似乎直到 alert() 之后才加载)。

奇怪的是,如果我将代码更改为:

if (in_array(domain, supported))
{
  include_dom('http://localhost/bklts/parse/'+domain+'.js');
  alert('hello there');
  alert(getName());
}

我在第一次点击时收到了两个警报,其余的脚本功能正常。如何使脚本在第一次单击小书签时运行而不会出现虚假警报?

谢谢! -马拉

最佳答案

通过 DHTML 添加 <script> 标记会使脚本异步加载,这意味着浏览器将开始加载它,但不会等待它运行脚本的其余部分。

您可以处理标记对象上的事件以查明何时加载脚本。这是我使用的一段示例代码,它似乎在所有浏览器中都能正常工作,尽管我确信有更好的方法来实现这一点,但我希望这会为您指明正确的方向:

不要忘记将 tag 更改为包含 <script> 元素的对象,将 fnLoader 更改为加载脚本时调用的函数,将 fnError 更改为加载脚本失败时调用的函数。

请记住,这些函数将在稍后调用,因此它们(如标签)必须可用(闭包通常会处理)。

        tag.onload = fnLoader;
    tag.onerror = fnError;
    tag.onreadystatechange = function() {
        if (!window.opera && typeof tag.readyState == "string"){
            /* Disgusting IE fix */
            if (tag.readyState == "complete" || tag.readyState == "loaded") {
                fnLoader();
            } else if (tag.readyState != "loading") {
                fnError();
            };
        } else if (tag.readyState == 4) {
            if (tag.status != 200) {
                fnLoader();
            }
            else {
                fnError();
            };
        };
    });

关于javascript - 从 JS 中的另一个脚本获取函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1281809/

相关文章:

javascript - 在jquery中查找表是否有特定字符串

Powershell帮助,如果进程存在,停止它,否则启动服务?

xml - 使用 bash 脚本添加/删除 xml 标签

java - 将字符串从 Java 传递到 bash 脚本

javascript - object.onload 在 IE 和 Edge 上失败

javascript - Angular js 不使用 ng-repeat 打印 ng-init 的数据

bash - 在另一个 .pdf 文件的每一页末尾添加一个 .pdf 文件(基本上是 .png)

c++ - Flash 和 C++ 的脚本语言?

javascript - 注册表单提交和 Java servlet

javascript - 日期范围选择器如何在输入日期时触发事件