Какая сопоставимая функция Javascript может ссылаться на файл, такой как PHP include ()? - PullRequest
1 голос
/ 09 июня 2009

Как лучше всего ссылаться на файл или включать его с помощью Javascript, чтобы найти наиболее близкую функциональность PHP include ()

Ответы [ 4 ]

7 голосов
/ 09 июня 2009

Я хотел бы проверить Эквивалент JavaScript для PHP, включая :

Эта статья является частью 'Портирования Проект PHP в Javascript, цель которого уменьшить разрыв между развивающимися для PHP и Javascript.

Прямого эквивалента не существует - вы можете перейти с помощью функции, с которой я связан выше, или использовать document.write для записи нового тега script с src, указывающим на файл, который вы хотите включить.

Редактировать: Вот простой пример того, что я имею в виду:

function include(path) {
    document.write(
        "<script type=\"text/javascript\" src=\"" + path + "\"></script>"
    );
}

Редактировать 2: Тьфу, какой ужасный пример - вот лучший:

function include(path) {
    script = document.createElement("script");
    script.setAttribute("type", "text/javascript");
    script.setAttribute("src", path);

    if (head = document.getElementsByTagName("head")[0]) {
        head.appendChild(script);
    }
}

document.write - это хакерский способ ведения дел, и я не должен был его рекомендовать. Если вы используете один из моих примеров, пожалуйста, используйте второй.

0 голосов
/ 20 января 2012

Вместо использования javascript и усложнения нашей работы у нас есть довольно простой способ включить внешний файл, используя тег IFRAME в HTML.

**

<iframe src="....../path/filename.html" width="" height="">

**

Мы также можем управлять iframe с помощью CSS, если требуется еще больше настроек.

0 голосов
/ 10 июня 2009

jQuery имеет плагин для этого: http://plugins.jquery.com/project/include

0 голосов
/ 09 июня 2009

У меня есть скрипт, который я написал некоторое время назад (с использованием Mootools ), который позволяет включать файлы javascript на лету (с функцией обратного вызова после его загрузки). Вы можете изменить его так, чтобы он работал в библиотеке по вашему выбору.

Обратите внимание, что префикс gvi - это просто мое пространство имен, а gvi.scripts - это массив, содержащий все файлы javascript, в настоящее время включенные на страницу, которые можно удалить, если хотите. Также можно удалить функцию filename, которая была добавлена ​​для облегчения моей жизни [require('some-script') против require('js/some-script.js')].

//if dom isn't loaded, add the function to the domready queue, otherwise call it immediately
gvi.smartcall = function(fn) {
    return (Browser.loaded) ?  fn() : window.addEvent('domready', fn);
}

//For dynamic javascript loading
gvi.require = function(files, callback, fullpath) {
    callback = callback || $empty;
    fullpath = fullpath || false;
    var filename = function(file) {
        if (fullpath == true) return file;
        file = ( file.match( /^js\/./ ) ) ? file : "js/"+file;
        return ( file.match( /\.js$/ ) ? file : file+".js" );
    }

    var exists = function(src) {
        return gvi.scripts.contains(src);
    }

    if ($type(files) == "string") {
        var src = filename(files);

        if (exists(src)) {
            gvi.smartcall(callback);
        } else {
                        new Asset.javascript( src, {
                'onload' : function() {
                    gvi.scripts.push(src);
                    gvi.smartcall(callback);
                }
            });
        }

    } else {
        var total = files.length, loaded = 0;
        files.each(function(file) {
                        var src = filename(file);

            if (exists(src) && loaded == total) {
                gvi.smartcall(callback);

            } else if (exists(src)) {
                loaded++;
            } else {
                            new Asset.javascript( src, {
                    'onload' : function() {
                        gvi.scripts.push(src);
                        loaded++;
                        if (loaded == total) gvi.smartcall(callback);
                    }
                });
            }
        });
    }
}

И вы называете это как

gvi.require('my-file', function() {
  doStuff();
});

//or
gvi.require(['file1', 'file2'], function() {
  doStuff();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...