You need to sign in to do that
Don't have an account?
VPM 1
scripts may close only the windows that were opened by it
I have created a Lightning component which replaces the standard Navigation buttons on the flow. On click of the Finish button it is suppose to close the tab. I have added this Lightning component on a flow and flow has been embedded in a Community. When I go to All Communities and click on the community URL the tab closes correctly. Which means the Lighning component is working correctly. However, when I open the community in a seperate tab the Lightning component does not work. It does not close the browser tab upon clicking on finish button.
I did some troubleshooting and found that my windows.close () is not working and giving an error in Inspect>Element of the browser as "scripts may close only the windows that were opened by it". I checked few other functions and methods but none of them worked. Any help with this will be greatly appreciated. My Lightning component and Controller is mentioned below:
Component:
<aura:component access="global" implements="lightning:availableForFlowScreens" >
<!-- Determine which actions are available -->
<aura:attribute name="canPause" type="Boolean" />
<aura:attribute name="canBack" type="Boolean" />
<aura:attribute name="canNext" type="Boolean" />
<aura:attribute name="canFinish" type="Boolean" />
<aura:handler name="init" value="{!this}" action="{!c.init}" />
<div aura:id="actionButtonBar" class="slds-clearfix slds-p-top_medium">
<!-- If Previous is available, display to the left -->
<div class="slds-float_left">
<aura:if isTrue="{!v.canBack}">
<lightning:button aura:id="BACK" label="Previous"
variant="neutral" onclick="{!c.onButtonPressed}" />
</aura:if>
</div>
<div class="slds-float_right">
<!-- If Pause, Next, or Finish are available, display to the right -->
<aura:if isTrue="{!v.canPause}">
<lightning:button aura:id="PAUSE" label="Pause"
variant="neutral" onclick="{!c.onButtonPressed}" />
</aura:if>
<aura:if isTrue="{!v.canNext}">
<lightning:button aura:id="NEXT" label="Next"
variant="neutral" onclick="{!c.onButtonPressed}" />
</aura:if>
<aura:if isTrue="{!v.canFinish}">
<lightning:button aura:id="FINISH" label="Finish"
variant="brand" onclick="{!c.onButtonPressed}" />
</aura:if>
</div>
</div>
</aura:component>
Controller:
({
init : function(cmp, event, helper) {
// Figure out which buttons to display
var availableActions = cmp.get('v.availableActions');
for (var i = 0; i < availableActions.length; i++) {
if (availableActions[i] == "PAUSE") {
cmp.set("v.canPause", true);
} else if (availableActions[i] == "BACK") {
cmp.set("v.canBack", true);
} else if (availableActions[i] == "NEXT") {
cmp.set("v.canNext", true);
} else if (availableActions[i] == "FINISH") {
cmp.set("v.canFinish", true);
}
}
},
onButtonPressed: function(cmp, event, helper) {
// Figure out which action was called
var actionClicked = event.getSource().getLocalId();
// Fire that action
var navigate = cmp.get('v.navigateFlow');
navigate(actionClicked);
setTimeout(function(){ window.close() }, 1000);
},
})
I did some troubleshooting and found that my windows.close () is not working and giving an error in Inspect>Element of the browser as "scripts may close only the windows that were opened by it". I checked few other functions and methods but none of them worked. Any help with this will be greatly appreciated. My Lightning component and Controller is mentioned below:
Component:
<aura:component access="global" implements="lightning:availableForFlowScreens" >
<!-- Determine which actions are available -->
<aura:attribute name="canPause" type="Boolean" />
<aura:attribute name="canBack" type="Boolean" />
<aura:attribute name="canNext" type="Boolean" />
<aura:attribute name="canFinish" type="Boolean" />
<aura:handler name="init" value="{!this}" action="{!c.init}" />
<div aura:id="actionButtonBar" class="slds-clearfix slds-p-top_medium">
<!-- If Previous is available, display to the left -->
<div class="slds-float_left">
<aura:if isTrue="{!v.canBack}">
<lightning:button aura:id="BACK" label="Previous"
variant="neutral" onclick="{!c.onButtonPressed}" />
</aura:if>
</div>
<div class="slds-float_right">
<!-- If Pause, Next, or Finish are available, display to the right -->
<aura:if isTrue="{!v.canPause}">
<lightning:button aura:id="PAUSE" label="Pause"
variant="neutral" onclick="{!c.onButtonPressed}" />
</aura:if>
<aura:if isTrue="{!v.canNext}">
<lightning:button aura:id="NEXT" label="Next"
variant="neutral" onclick="{!c.onButtonPressed}" />
</aura:if>
<aura:if isTrue="{!v.canFinish}">
<lightning:button aura:id="FINISH" label="Finish"
variant="brand" onclick="{!c.onButtonPressed}" />
</aura:if>
</div>
</div>
</aura:component>
Controller:
({
init : function(cmp, event, helper) {
// Figure out which buttons to display
var availableActions = cmp.get('v.availableActions');
for (var i = 0; i < availableActions.length; i++) {
if (availableActions[i] == "PAUSE") {
cmp.set("v.canPause", true);
} else if (availableActions[i] == "BACK") {
cmp.set("v.canBack", true);
} else if (availableActions[i] == "NEXT") {
cmp.set("v.canNext", true);
} else if (availableActions[i] == "FINISH") {
cmp.set("v.canFinish", true);
}
}
},
onButtonPressed: function(cmp, event, helper) {
// Figure out which action was called
var actionClicked = event.getSource().getLocalId();
// Fire that action
var navigate = cmp.get('v.navigateFlow');
navigate(actionClicked);
setTimeout(function(){ window.close() }, 1000);
},
})