如何在与Salesforce Lightning Experience兼容的visualforce页面中创建下载按钮

时间:2019-01-17 00:56:04

标签: javascript salesforce visualforce salesforce-lightning

我有一个VF页面(下面的代码),该页面具有一个自定义按钮,该按钮将捕获字段的值并给出一个下载弹出窗口,以将该值保存到文件中。这可以在visualforce中顺利运行。 在Classic中,看起来像这样https://sfuser-dev-developer-edition.na50.force.com/apex/Weather_View?id=a0A6A000009XV2k&sfdc.override=1 但是,一旦我们迁移到Lightning,该按钮将弹出一个怪异的弹出窗口(附带的屏幕截图),下载文件和格式也随之更改(文件名仅是下载文件,无法识别所提供的格式)。有什么办法可以解决此问题?我们不会很快迁移到Lightning组件,因此我们将不得不忍受一段时间在Lightning中渲染的VF页面。

我尝试调整JS中的href属性,但看起来没有帮助。

<apex:page standardController="Weather__c" showHeader="false" sidebar="false">
    <apex:pageMessages />
    <apex:form>
        <apex:pageBlock mode="maindetail" title="Weather Details">
            <apex:pageBlockSection columns="2">
                <apex:outputField value="{!Weather__c.Name}" />
                <apex:outputField value="{!Weather__c.OwnerId}" />
                <apex:outputField value="{!Weather__c.City__c}" />
                <apex:outputField value="{!Weather__c.TempInFahrenheit__c }" />
                <apex:pageBlockSectionItem >
                    <apex:outputLabel for="forecastid" value="Forecast Details"/>
                    <apex:outputField id="forecastid" value="{!Weather__c.Forecast_Details__c }"/>
                </apex:pageBlockSectionItem>
                <apex:pageBlockSectionItem ></apex:pageBlockSectionItem>
                <apex:pageBlockSectionItem >
                    <apex:outputPanel style="padding-left: 45%">
                        <apex:commandButton value="Download Forecast Details" oncomplete="downloadVal('Forecast_Details' + '.txt', 'false')" />
                    </apex:outputPanel>
                </apex:pageBlockSectionItem>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>

    <script type="text/javascript">
        function downloadVal(filename, addText) {
            var data = '{!Weather__c.Forecast_Details__c}';
            var bundleData = data;
            try {
                if(addText == 'true') {
                    newText = 'Adding some more text';
                    bundleData = data + '\n' + newText;
                }
                var element = document.createElement('a');
                element.setAttribute('href', 'data:application/text;charset=utf-8,' + encodeURIComponent(bundleData));
                element.setAttribute('download', filename);
                element.style.display = 'none';
                document.body.appendChild(element);
                element.click();
                document.body.removeChild(element);
            } catch(e) {
                alert(e);
            }
        }
    </script>
</apex:page>

Lightning Experience error image

0 个答案:

没有答案