按下按钮动态注入脚本

时间:2012-07-07 17:17:30

标签: javascript html

点击我的网页上的按钮会执行以下操作,即将脚本注入页面

function InjectToolbar() {
    var script = document.createElement('script');
    scriptFarfalla.src = 'some_Path'
    document.getElementsByTagName('head')[0].appendChild(script);

}

。 。 。 。 。

它成功执行了所需的操作。但是当我重新加载页面时,脚本就丢失了

是否有任何方法/技术可以缓冲按钮的点击 像切换按钮一样

切换.....>脚本注入

切换.....>脚本分离

2 个答案:

答案 0 :(得分:1)

您可以使用cookie存储已注入的脚本,然后在页面加载时重新注入它们。 Cookie和较新的local storage是在客户端上存储状态的常用方法。

答案 1 :(得分:1)

当您离开页面(并返回页面)时,javascript中发生的一切都会被重置。因此,您需要一种方法来存储是否加载了某些内容。这取决于您希望“保存”/“记住”多长时间。您可以通过以下几种方式保存此信息 - Cookies,HTML5 localStorage,HTML5 sessionStorage以及您可用的任何服务器会话使用情况(如果适用)。因此,如果您想实现类似的功能,现在需要对页面进行代码加载,以检查特定存储是否已设置。如果是这样,请注入脚本。这就是我的意思:

window.onload = function () {
    if (checkIfInjected()) {
        scriptInjection(true);
    }
}

function toggleInjection() {
    if (checkIfInjected()) {
        scriptInjection(false);
    } else {
        scriptInjection(true);
    }
}

function scriptInjection(inject) {
    if (inject == true) {
        var script = document.createElement('script');
        script.src = 'some_Path';
        script.id = 'injected_script_id';
        document.getElementsByTagName('head')[0].appendChild(script);

        // Set the storage to say that script is injected
    } else {
        var the_script = document.getElementById("injected_script_id");
        the_script.parentNode.removeChild(the_script);
        the_script = null;

        // Set the storage to say that script has been removed (or remove from storage altogether)
    }
}

function checkIfInjected() {
    // The following syntax is wrong for anything - you need to use the correct getter for the storage type you use
    return storage.contains("script_injected");
}

<input type="button" id="button1" onclick="toggleInjection();" />

现在由您来确定您想要的存储类型,因为它们都会执行不同的操作,包括存储内容,存储内容以及存储时间。