为什么docx js api可以在jsfiddle(或其他类似的站点)上工作,但是当我通过Tampermonkey加载它时却不能工作?

问题描述 投票:0回答:1

我目前在编写Javascript方面处于初级阶段,并且在过去的几个月中一直在进行很多自学。现在,我正在尝试使用Tampermonkey创建自动化脚本,以便在工作中创建文档文件。我要用来完成此操作的API是docx(https://docx.js.org/)。

我的问题如下:

我正在尝试一些代码来测试API的功能,因此我只想创建一个简单的空白文件,然后将其保存到我的计算机中以确保其正常工作。因此,我去了jsFiddle并写了一些简单的代码来附加到保存文档文件的按钮上。该代码有效,并且生成了一个空白文件,并将其保存到我的计算机上。

现在,我转到Tampermonkey并插入相同的代码,但是当我在浏览器中尝试该代码时,它不起作用,并且不会记录任何错误。通过大量的挖掘,我认为能够找到代码无法正常工作的原因。 API中的功能之一会将我创建的文件转换为Blob,以便随后可以将其下载为doc文件,并返回Promise。在控制台中,当我在jsfiddle中运行代码时,看到Promise的状态为“已解决”。当我在任何页面之外运行代码时,状态始终为“待处理”。

该代码还可以成功地在类似于jsfiddle的网站上运行,例如codepen,repl等。我尝试了许多建议,例如在页面加载完成后运行该代码(使用window.onload$(document).ready() ),但没有任何效果。我不确定jsfiddle对我的代码还会执行什么其他操作。可能是坦帕蒙奇吗?这是jsfiddle上的代码供参考:http://jsfiddle.net/jcor19/qz8n4wmu/

这是Tampermonkey脚本代码:

    // ==UserScript==
// @name         Test Script
// @namespace    http://tampermonkey.net/
// @version      1.0
// @author       me
// @match        http://e-try.com/black.htm
// @require      https://code.jquery.com/jquery-3.4.1.js
// @require      https://code.jquery.com/ui/1.12.1/jquery-ui.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.js
// @require      https://unpkg.com/[email protected]/build/index.js
// ==/UserScript==

jQuery(function() {
    var button = document.createElement("button");
    button.innerHTML = "Do Something";

    var body = document.getElementsByTagName("body")[0];
    body.appendChild(button);

    button.addEventListener("click", function() {
        const doc = new Document();

        Packer.toBlob(doc).then(blob => {
            console.log(blob);
            saveAs(blob, "example.docx");
            console.log("Document created successfully");
        });
    });
});

谢谢您的光临!

javascript html jsfiddle
1个回答
0
投票

是,我看到的是完全一样的东西。

我相信这与沙箱和本机页面执行环境有关。

我尝试了多种方式将看起来像您上面最小的docx js示例的代码注入双方,但没有任何效果。

刚离开就抱有希望。

© www.soinside.com 2019 - 2024. All rights reserved.