如何获取 suitelet 客户端脚本的 css 文件的相对路径?

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

这里的基本背景故事/问题是我的自定义(套件)在一种环境中运行良好,但由于硬编码到 css 文件的链接而在其他环境中崩溃。

我有一个带有 serverWidget 表单的 suitelet,我在其中添加了多个字段和一个内联 HTML 字段。

var form = serverWidget.createForm({
                title: 'Customer Locations'
            });

HTML 基本上是添加一个 div,客户端脚本将内容添加到该 div 中。

我像这样附加客户端脚本:

form.clientScriptModulePath = "./Customer Map geostored.js";

一切顺利。但我正在使用的模块(传单)有自己的 css 文件来渲染地图。在客户端脚本中我正在这样做:

var head  = document.getElementsByTagName('head')[0];
            var link  = document.createElement('link');
            link.id   = 'customCSS';
            link.rel  = 'stylesheet';
            link.type = 'text/css';
            link.href = 'https://xxxx.app.netsuite.com/core/media/media.nl?id=4949949&c=3903104&h=oGKTyQwF9Hg1BOaex_GWREN9IQGxFKIOB_f26Sh7eStm2l8S&_xt=.css';
            link.media = 'all';

            var link2  = document.createElement('link');
            link2.id   = 'LeafletCSS';
            link2.rel  = 'stylesheet';
            link2.type = 'text/css';
            link2.href = 'https://xxxx.app.netsuite.com/core/media/media.nl?id=4949967&c=3903104&h=LwHy6rO0fXmyEIIr_PINP38vQ5n5R7Ga_LSTtYwUKo32naWH&_xt=.css';
            link2.media = 'all';

            head.insertBefore(link, head.firstChild);
            head.insertBefore(link2, head.firstChild);

正如您所看到的,href 是我们生产帐户的直接路径,因此沙箱或发布预览中的 URL 是不同的。我很想以某种方式使用 N/file 之类的东西获得相对路径,但支持人员表示这是不可能的,他们正在创建增强请求。所以我想知道其他人如何处理这种情况,你是否将路径作为来自 suitelet 的参数传递?

我看到我可以像这里一样进行 DOM hack:https://ursuscode.com/netsuite-tips/loading-custom-html-and-bootstrap-within-a-suitelet-form/但更愿意避免这种情况如果可以的话。

谢谢!

netsuite suitescript2.0
2个回答
0
投票

而不是

link.href = 'https://xxxx.app.netsuite.com/core/media/media.nl?id=4949949&c=3903104&h=oGKTyQwF9Hg1BOaex_GWREN9IQGxFKIOB_f26Sh7eStm2l8S&_xt=.css';

尝试使用

link.href = '/core/media/media.nl?id=4949949&c=3903104&h=oGKTyQwF9Hg1BOaex_GWREN9IQGxFKIOB_f26Sh7eStm2l8S&_xt=.css';

即省略域协议和域路径。

但不确定您是否需要调整这些乱码值


0
投票

确实,客户端脚本不支持

N/file
模块 - 似乎这就是“支持”在说这是不可能时所回答的问题。但是,您可以使用
N/search
模块在给定文件名的情况下检索文件的URL。

    let theURL;
    search.create({
        type: 'file',
        filters: [
            ['name', 'is', {{theFileName}}]
        ],
        columns: [
            'url'
        ]
    }).run().each( r => {
        vwURL = r.getValue({
            name: 'url'
        });
        return false;
    });
    return theURL;

(当然,您需要在文件顶部将

N/search
模块声明为
search

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